@vlian/framework 1.2.19 → 1.2.37

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 (252) hide show
  1. package/dist/analytics.umd.js +208 -2395
  2. package/dist/analytics.umd.js.map +1 -1
  3. package/dist/core/error/ErrorHandler.cjs.map +1 -1
  4. package/dist/core/error/ErrorHandler.d.ts +1 -1
  5. package/dist/core/error/ErrorHandler.js.map +1 -1
  6. package/dist/core/index.cjs +0 -1
  7. package/dist/core/index.cjs.map +1 -1
  8. package/dist/core/index.d.ts +1 -2
  9. package/dist/core/index.js +0 -1
  10. package/dist/core/index.js.map +1 -1
  11. package/dist/core/initialization/index.cjs.map +1 -1
  12. package/dist/core/initialization/index.d.ts +1 -1
  13. package/dist/core/initialization/index.js.map +1 -1
  14. package/dist/core/initialization/initialization.cjs +2 -147
  15. package/dist/core/initialization/initialization.cjs.map +1 -1
  16. package/dist/core/initialization/initialization.d.ts +0 -57
  17. package/dist/core/initialization/initialization.js +2 -148
  18. package/dist/core/initialization/initialization.js.map +1 -1
  19. package/dist/core/kernel/startKernel.cjs +1 -2
  20. package/dist/core/kernel/startKernel.cjs.map +1 -1
  21. package/dist/core/kernel/startKernel.js +1 -2
  22. package/dist/core/kernel/startKernel.js.map +1 -1
  23. package/dist/core/plugin.cjs +16 -16
  24. package/dist/core/plugin.cjs.map +1 -1
  25. package/dist/core/plugin.d.ts +5 -1
  26. package/dist/core/plugin.js +17 -17
  27. package/dist/core/plugin.js.map +1 -1
  28. package/dist/core/router/monitoring/RouterMonitoring.cjs +1 -1
  29. package/dist/core/router/monitoring/RouterMonitoring.cjs.map +1 -1
  30. package/dist/core/router/monitoring/RouterMonitoring.js +1 -1
  31. package/dist/core/router/monitoring/RouterMonitoring.js.map +1 -1
  32. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +13 -8
  33. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs.map +1 -1
  34. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js +13 -8
  35. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js.map +1 -1
  36. package/dist/core/router/utils/adapters/react-router/transform.cjs +4 -0
  37. package/dist/core/router/utils/adapters/react-router/transform.cjs.map +1 -1
  38. package/dist/core/router/utils/adapters/react-router/transform.js +4 -0
  39. package/dist/core/router/utils/adapters/react-router/transform.js.map +1 -1
  40. package/dist/core/startup/initializeServices.cjs +1 -1
  41. package/dist/core/startup/initializeServices.cjs.map +1 -1
  42. package/dist/core/startup/initializeServices.d.ts +1 -1
  43. package/dist/core/startup/initializeServices.js +1 -1
  44. package/dist/core/startup/initializeServices.js.map +1 -1
  45. package/dist/core/startup/performanceTracker.cjs.map +1 -1
  46. package/dist/core/startup/performanceTracker.d.ts +1 -1
  47. package/dist/core/startup/performanceTracker.js.map +1 -1
  48. package/dist/core/startup/renderApp.cjs +1 -1
  49. package/dist/core/startup/renderApp.cjs.map +1 -1
  50. package/dist/core/startup/renderApp.d.ts +1 -1
  51. package/dist/core/startup/renderApp.js +1 -1
  52. package/dist/core/startup/renderApp.js.map +1 -1
  53. package/dist/core/startup/startApp.cjs +2 -4
  54. package/dist/core/startup/startApp.cjs.map +1 -1
  55. package/dist/core/startup/startApp.js +3 -5
  56. package/dist/core/startup/startApp.js.map +1 -1
  57. package/dist/core/types.d.ts +2 -6
  58. package/dist/core/types.js.map +1 -1
  59. package/dist/index.cjs +15 -2
  60. package/dist/index.cjs.map +1 -1
  61. package/dist/index.d.ts +6 -4
  62. package/dist/index.js +5 -4
  63. package/dist/index.js.map +1 -1
  64. package/dist/index.umd.js +11758 -32895
  65. package/dist/index.umd.js.map +1 -1
  66. package/dist/kernel/constants.cjs +67 -0
  67. package/dist/kernel/constants.cjs.map +1 -0
  68. package/dist/kernel/constants.d.ts +5 -0
  69. package/dist/kernel/constants.js +43 -0
  70. package/dist/kernel/constants.js.map +1 -0
  71. package/dist/kernel/index.cjs +40 -0
  72. package/dist/kernel/index.cjs.map +1 -0
  73. package/dist/kernel/index.d.ts +3 -0
  74. package/dist/kernel/index.js +4 -0
  75. package/dist/kernel/index.js.map +1 -0
  76. package/dist/kernel/kernel.cjs +296 -0
  77. package/dist/kernel/kernel.cjs.map +1 -0
  78. package/dist/kernel/kernel.d.ts +40 -0
  79. package/dist/kernel/kernel.js +272 -0
  80. package/dist/kernel/kernel.js.map +1 -0
  81. package/dist/kernel/manager/cacheManager.cjs +46 -0
  82. package/dist/kernel/manager/cacheManager.cjs.map +1 -0
  83. package/dist/kernel/manager/cacheManager.d.ts +6 -0
  84. package/dist/kernel/manager/cacheManager.js +36 -0
  85. package/dist/kernel/manager/cacheManager.js.map +1 -0
  86. package/dist/kernel/manager/i18nManager.cjs +68 -0
  87. package/dist/kernel/manager/i18nManager.cjs.map +1 -0
  88. package/dist/kernel/manager/i18nManager.d.ts +8 -0
  89. package/dist/kernel/manager/i18nManager.js +58 -0
  90. package/dist/kernel/manager/i18nManager.js.map +1 -0
  91. package/dist/kernel/manager/index.cjs +30 -0
  92. package/dist/kernel/manager/index.cjs.map +1 -0
  93. package/dist/kernel/manager/index.d.ts +4 -0
  94. package/dist/kernel/manager/index.js +6 -0
  95. package/dist/kernel/manager/index.js.map +1 -0
  96. package/dist/kernel/manager/loggerManager.cjs +70 -0
  97. package/dist/kernel/manager/loggerManager.cjs.map +1 -0
  98. package/dist/kernel/manager/loggerManager.d.ts +14 -0
  99. package/dist/kernel/manager/loggerManager.js +60 -0
  100. package/dist/kernel/manager/loggerManager.js.map +1 -0
  101. package/dist/kernel/manager/persistence.cjs +93 -0
  102. package/dist/kernel/manager/persistence.cjs.map +1 -0
  103. package/dist/kernel/manager/persistence.d.ts +3 -0
  104. package/dist/kernel/manager/persistence.js +75 -0
  105. package/dist/kernel/manager/persistence.js.map +1 -0
  106. package/dist/kernel/manager/themeManager.cjs +85 -0
  107. package/dist/kernel/manager/themeManager.cjs.map +1 -0
  108. package/dist/kernel/manager/themeManager.d.ts +9 -0
  109. package/dist/kernel/manager/themeManager.js +75 -0
  110. package/dist/kernel/manager/themeManager.js.map +1 -0
  111. package/dist/kernel/types.cjs.map +1 -0
  112. package/dist/kernel/types.d.ts +72 -0
  113. package/dist/kernel/types.js.map +1 -0
  114. package/dist/library/storage/index.cjs +1 -1
  115. package/dist/library/storage/index.cjs.map +1 -1
  116. package/dist/library/storage/index.d.ts +1 -0
  117. package/dist/library/storage/index.js +1 -1
  118. package/dist/library/storage/index.js.map +1 -1
  119. package/dist/request/adapter.d.ts +1 -0
  120. package/dist/request/core.d.ts +1 -0
  121. package/dist/request/index.d.ts +1 -42
  122. package/dist/request/plugin/csrfPlugin.d.ts +2 -2
  123. package/dist/request/plugin/queue.d.ts +2 -2
  124. package/dist/request/plugin.d.ts +1 -0
  125. package/dist/request/runtime.d.ts +1 -0
  126. package/dist/request/types.d.ts +1 -394
  127. package/dist/request/utils.d.ts +1 -0
  128. package/dist/state.umd.js +1 -1
  129. package/dist/utils/csrf.cjs +13 -152
  130. package/dist/utils/csrf.cjs.map +1 -1
  131. package/dist/utils/csrf.d.ts +1 -72
  132. package/dist/utils/csrf.js +1 -142
  133. package/dist/utils/csrf.js.map +1 -1
  134. package/dist/utils/errors/ErrorCodes.cjs +6 -76
  135. package/dist/utils/errors/ErrorCodes.cjs.map +1 -1
  136. package/dist/utils/errors/ErrorCodes.d.ts +1 -45
  137. package/dist/utils/errors/ErrorCodes.js +1 -84
  138. package/dist/utils/errors/ErrorCodes.js.map +1 -1
  139. package/dist/utils/errors.cjs +15 -344
  140. package/dist/utils/errors.cjs.map +1 -1
  141. package/dist/utils/errors.d.ts +1 -183
  142. package/dist/utils/errors.js +1 -352
  143. package/dist/utils/errors.js.map +1 -1
  144. package/dist/utils/logger.cjs +5 -374
  145. package/dist/utils/logger.cjs.map +1 -1
  146. package/dist/utils/logger.d.ts +2 -189
  147. package/dist/utils/logger.js +1 -379
  148. package/dist/utils/logger.js.map +1 -1
  149. package/dist/utils/logger.types.cjs +3 -12
  150. package/dist/utils/logger.types.cjs.map +1 -1
  151. package/dist/utils/logger.types.d.ts +2 -57
  152. package/dist/utils/logger.types.js +1 -10
  153. package/dist/utils/logger.types.js.map +1 -1
  154. package/dist/utils/monitoring.cjs +11 -302
  155. package/dist/utils/monitoring.cjs.map +1 -1
  156. package/dist/utils/monitoring.d.ts +1 -163
  157. package/dist/utils/monitoring.js +1 -294
  158. package/dist/utils/monitoring.js.map +1 -1
  159. package/dist/utils/performance.cjs +5 -352
  160. package/dist/utils/performance.cjs.map +1 -1
  161. package/dist/utils/performance.d.ts +2 -246
  162. package/dist/utils/performance.js +1 -354
  163. package/dist/utils/performance.js.map +1 -1
  164. package/dist/utils/resourceLoader.cjs +5 -303
  165. package/dist/utils/resourceLoader.cjs.map +1 -1
  166. package/dist/utils/resourceLoader.d.ts +2 -130
  167. package/dist/utils/resourceLoader.js +1 -305
  168. package/dist/utils/resourceLoader.js.map +1 -1
  169. package/dist/utils/runtimeSecurity.cjs +2 -140
  170. package/dist/utils/runtimeSecurity.cjs.map +1 -1
  171. package/dist/utils/runtimeSecurity.d.ts +2 -104
  172. package/dist/utils/runtimeSecurity.js +1 -141
  173. package/dist/utils/runtimeSecurity.js.map +1 -1
  174. package/dist/utils/security.cjs +3 -314
  175. package/dist/utils/security.cjs.map +1 -1
  176. package/dist/utils/security.d.ts +2 -80
  177. package/dist/utils/security.js +1 -311
  178. package/dist/utils/security.js.map +1 -1
  179. package/dist/utils/traceId.cjs +10 -111
  180. package/dist/utils/traceId.cjs.map +1 -1
  181. package/dist/utils/traceId.d.ts +1 -63
  182. package/dist/utils/traceId.js +1 -116
  183. package/dist/utils/traceId.js.map +1 -1
  184. package/dist/utils/validation.cjs +3 -173
  185. package/dist/utils/validation.cjs.map +1 -1
  186. package/dist/utils/validation.d.ts +2 -110
  187. package/dist/utils/validation.js +1 -175
  188. package/dist/utils/validation.js.map +1 -1
  189. package/package.json +98 -13
  190. package/dist/core/ui-adapter/adapters.cjs +0 -45
  191. package/dist/core/ui-adapter/adapters.cjs.map +0 -1
  192. package/dist/core/ui-adapter/adapters.d.ts +0 -4
  193. package/dist/core/ui-adapter/adapters.js +0 -27
  194. package/dist/core/ui-adapter/adapters.js.map +0 -1
  195. package/dist/core/ui-adapter/index.cjs +0 -21
  196. package/dist/core/ui-adapter/index.cjs.map +0 -1
  197. package/dist/core/ui-adapter/index.d.ts +0 -2
  198. package/dist/core/ui-adapter/index.js +0 -3
  199. package/dist/core/ui-adapter/index.js.map +0 -1
  200. package/dist/core/ui-adapter/types.cjs.map +0 -1
  201. package/dist/core/ui-adapter/types.d.ts +0 -24
  202. package/dist/core/ui-adapter/types.js.map +0 -1
  203. package/dist/request/adapter/RequestAdapter.cjs +0 -78
  204. package/dist/request/adapter/RequestAdapter.cjs.map +0 -1
  205. package/dist/request/adapter/axiosAdapter.cjs +0 -164
  206. package/dist/request/adapter/axiosAdapter.cjs.map +0 -1
  207. package/dist/request/adapter/fetchAdapter.cjs +0 -134
  208. package/dist/request/adapter/fetchAdapter.cjs.map +0 -1
  209. package/dist/request/adapter/index.cjs +0 -80
  210. package/dist/request/adapter/index.cjs.map +0 -1
  211. package/dist/request/adapter/kyAdapter.cjs +0 -191
  212. package/dist/request/adapter/kyAdapter.cjs.map +0 -1
  213. package/dist/request/adapter/undiciAdapter.cjs +0 -213
  214. package/dist/request/adapter/undiciAdapter.cjs.map +0 -1
  215. package/dist/request/core/RequestClient.cjs +0 -558
  216. package/dist/request/core/RequestClient.cjs.map +0 -1
  217. package/dist/request/core/index.cjs +0 -15
  218. package/dist/request/core/index.cjs.map +0 -1
  219. package/dist/request/index.cjs +0 -149
  220. package/dist/request/index.cjs.map +0 -1
  221. package/dist/request/plugin/RequestPlugin.cjs +0 -218
  222. package/dist/request/plugin/RequestPlugin.cjs.map +0 -1
  223. package/dist/request/plugin/cache.cjs +0 -269
  224. package/dist/request/plugin/cache.cjs.map +0 -1
  225. package/dist/request/plugin/csrfPlugin.cjs +0 -40
  226. package/dist/request/plugin/csrfPlugin.cjs.map +0 -1
  227. package/dist/request/plugin/index.cjs +0 -53
  228. package/dist/request/plugin/index.cjs.map +0 -1
  229. package/dist/request/plugin/monitoring.cjs +0 -216
  230. package/dist/request/plugin/monitoring.cjs.map +0 -1
  231. package/dist/request/plugin/queue.cjs +0 -140
  232. package/dist/request/plugin/queue.cjs.map +0 -1
  233. package/dist/request/plugin/retry.cjs +0 -98
  234. package/dist/request/plugin/retry.cjs.map +0 -1
  235. package/dist/request/plugin/validation.cjs +0 -121
  236. package/dist/request/plugin/validation.cjs.map +0 -1
  237. package/dist/request/runtime/RequestContext.cjs +0 -77
  238. package/dist/request/runtime/RequestContext.cjs.map +0 -1
  239. package/dist/request/runtime/index.cjs +0 -32
  240. package/dist/request/runtime/index.cjs.map +0 -1
  241. package/dist/request/types.cjs +0 -112
  242. package/dist/request/types.cjs.map +0 -1
  243. package/dist/request/utils/RequestQueueManager.cjs +0 -168
  244. package/dist/request/utils/RequestQueueManager.cjs.map +0 -1
  245. package/dist/request/utils/dependencyCheck.cjs +0 -237
  246. package/dist/request/utils/dependencyCheck.cjs.map +0 -1
  247. package/dist/request/utils/index.cjs +0 -30
  248. package/dist/request/utils/index.cjs.map +0 -1
  249. package/dist/request.umd.js +0 -5392
  250. package/dist/request.umd.js.map +0 -1
  251. /package/dist/{core/ui-adapter → kernel}/types.cjs +0 -0
  252. /package/dist/{core/ui-adapter → kernel}/types.js +0 -0
@@ -2,310 +2,19 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get MonitoringService () {
13
- return MonitoringService;
14
- },
15
- get getMonitoring () {
16
- return getMonitoring;
17
- },
18
- get initMonitoring () {
19
- return initMonitoring;
20
- }
21
- });
22
- const _logger = require("./logger");
23
- const _errors = require("./errors");
24
- const _performance = require("./performance");
25
- function _define_property(obj, key, value) {
26
- if (key in obj) {
27
- Object.defineProperty(obj, key, {
28
- value: value,
29
- enumerable: true,
30
- configurable: true,
31
- writable: true
32
- });
33
- } else {
34
- obj[key] = value;
35
- }
36
- return obj;
37
- }
38
- let MonitoringService = class MonitoringService {
39
- /**
40
- * 初始化错误捕获
41
- */ initErrorCapture() {
42
- // 捕获未处理的 Promise 错误
43
- this.unhandledRejectionHandler = (event)=>{
44
- const error = _errors.errorUtils.normalizeError(event.reason);
45
- this.captureError(error, {
46
- type: 'unhandledrejection',
47
- reason: event.reason
48
- });
49
- };
50
- window.addEventListener('unhandledrejection', this.unhandledRejectionHandler);
51
- // 捕获全局错误
52
- this.errorHandler = (event)=>{
53
- const error = _errors.errorUtils.normalizeError(event.error || new Error(event.message));
54
- this.captureError(error, {
55
- type: 'global',
56
- filename: event.filename,
57
- lineno: event.lineno,
58
- colno: event.colno
5
+ _export_star(require("@vlian/monitoring"), exports);
6
+ function _export_star(from, to) {
7
+ Object.keys(from).forEach(function(k) {
8
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
9
+ Object.defineProperty(to, k, {
10
+ enumerable: true,
11
+ get: function() {
12
+ return from[k];
13
+ }
59
14
  });
60
- };
61
- window.addEventListener('error', this.errorHandler);
62
- }
63
- /**
64
- * 清理资源
65
- */ destroy() {
66
- // 移除事件监听器
67
- if (typeof window !== 'undefined') {
68
- if (this.unhandledRejectionHandler) {
69
- window.removeEventListener('unhandledrejection', this.unhandledRejectionHandler);
70
- }
71
- if (this.errorHandler) {
72
- window.removeEventListener('error', this.errorHandler);
73
- }
74
- }
75
- // 停止聚合定时器
76
- if (this.aggregationTimer) {
77
- clearInterval(this.aggregationTimer);
78
- this.aggregationTimer = undefined;
79
- }
80
- // 清空错误处理器
81
- this.errorHandlers = [];
82
- this.errorRecords = [];
83
- this.errorAggregations.clear();
84
- }
85
- /**
86
- * 启动错误聚合定时器
87
- */ startAggregationTimer() {
88
- this.aggregationTimer = setInterval(()=>{
89
- this.aggregateErrors();
90
- }, this.errorConfig.aggregationWindow);
91
- }
92
- /**
93
- * 聚合错误
94
- */ aggregateErrors() {
95
- const now = Date.now();
96
- const windowStart = now - this.errorConfig.aggregationWindow;
97
- // 过滤窗口内的错误
98
- const windowErrors = this.errorRecords.filter((record)=>record.timestamp >= windowStart);
99
- // 按错误代码聚合
100
- const aggregations = new Map();
101
- for (const record of windowErrors){
102
- const error = record.error;
103
- const key = `${error.code}_${error.type}`;
104
- if (!aggregations.has(key)) {
105
- aggregations.set(key, {
106
- code: error.code,
107
- message: error.message,
108
- type: error.type,
109
- count: 0,
110
- firstOccurrence: record.timestamp,
111
- lastOccurrence: record.timestamp,
112
- stack: error.originalError?.stack,
113
- context: error.context
114
- });
115
- }
116
- const agg = aggregations.get(key);
117
- agg.count++;
118
- agg.lastOccurrence = Math.max(agg.lastOccurrence, record.timestamp);
119
- }
120
- // 更新聚合结果
121
- this.errorAggregations = aggregations;
122
- }
123
- /**
124
- * 捕获错误
125
- */ captureError(error, context) {
126
- // 采样检查
127
- if (Math.random() > this.errorConfig.sampleRate) {
128
- return;
129
- }
130
- const normalizedError = _errors.errorUtils.normalizeError(error);
131
- // 创建带上下文的错误对象(使用 Object.assign 来更新只读属性)
132
- const errorWithContext = Object.assign(normalizedError, {
133
- context: {
134
- ...normalizedError.context,
135
- ...context,
136
- timestamp: new Date().toISOString(),
137
- userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : undefined,
138
- url: typeof window !== 'undefined' ? window.location.href : undefined
139
- }
140
- });
141
- // 记录错误
142
- const timestamp = Date.now();
143
- this.errorRecords.push({
144
- error: errorWithContext,
145
- timestamp
146
- });
147
- // 限制错误记录数量
148
- if (this.errorRecords.length > this.errorConfig.maxErrorRecords) {
149
- this.errorRecords.shift();
150
- }
151
- // 记录日志
152
- if (this.errorConfig.showInConsole) {
153
- _logger.logger.error('监控服务捕获到错误:', errorWithContext.toJSON());
154
- }
155
- // 调用错误回调
156
- this.errorConfig.onError(errorWithContext, context);
157
- // 调用注册的错误处理器
158
- this.errorHandlers.forEach((handler)=>{
159
- try {
160
- handler(errorWithContext);
161
- } catch (e) {
162
- // 忽略处理器错误
163
- }
164
- });
165
- }
166
- /**
167
- * 获取错误聚合信息
168
- *
169
- * @param code - 错误代码(可选,如果提供则只返回该错误的聚合信息)
170
- * @returns 错误聚合信息
171
- */ getErrorAggregations(code) {
172
- if (code) {
173
- const aggregation = this.errorAggregations.get(code);
174
- return aggregation ? [
175
- aggregation
176
- ] : [];
177
15
  }
178
- return Array.from(this.errorAggregations.values());
179
- }
180
- /**
181
- * 获取错误记录
182
- *
183
- * @param limit - 限制返回的记录数
184
- * @param since - 只返回此时间之后的错误
185
- * @returns 错误记录
186
- */ getErrorRecords(limit, since) {
187
- let records = this.errorRecords;
188
- if (since) {
189
- records = records.filter((record)=>record.timestamp >= since);
190
- }
191
- if (limit) {
192
- records = records.slice(-limit);
193
- }
194
- return [
195
- ...records
196
- ];
197
- }
198
- /**
199
- * 清空错误记录
200
- */ clearErrorRecords() {
201
- this.errorRecords = [];
202
- this.errorAggregations.clear();
203
- }
204
- /**
205
- * 注册错误处理器
206
- */ onError(handler) {
207
- this.errorHandlers.push(handler);
208
- return ()=>{
209
- const index = this.errorHandlers.indexOf(handler);
210
- if (index > -1) {
211
- this.errorHandlers.splice(index, 1);
212
- }
213
- };
214
- }
215
- /**
216
- * 上报性能指标
217
- */ reportPerformance(metrics, context) {
218
- // 将传入的指标转换为带单位的格式
219
- const metricsWithUnits = (0, _performance.convertMetricsToWithUnits)(metrics);
220
- // 合并到现有指标中
221
- this.performanceMetrics = {
222
- ...this.performanceMetrics,
223
- ...metricsWithUnits
224
- };
225
- // 记录性能指标(带上下文)
226
- if (context) {
227
- _logger.logger.debug('性能指标更新:', {
228
- metrics: metricsWithUnits,
229
- context
230
- });
231
- } else {
232
- _logger.logger.debug('性能指标更新:', metricsWithUnits);
233
- }
234
- }
235
- /**
236
- * 批量上报性能指标
237
- */ reportPerformanceBatch(metricsArray) {
238
- for (const { metrics, context } of metricsArray){
239
- this.reportPerformance(metrics, context);
240
- }
241
- }
242
- /**
243
- * 获取性能指标(带单位)
244
- */ getPerformanceMetrics() {
245
- return {
246
- ...this.performanceMetrics
247
- };
248
- }
249
- /**
250
- * 获取性能指标(原始数值格式,向后兼容)
251
- */ getPerformanceMetricsRaw() {
252
- const result = {};
253
- for (const [key, metricValue] of Object.entries(this.performanceMetrics)){
254
- if (metricValue && typeof metricValue === 'object' && 'value' in metricValue) {
255
- result[key] = metricValue.value;
256
- }
257
- }
258
- return result;
259
- }
260
- /**
261
- * 记录用户行为(匿名)
262
- */ trackEvent(eventName, properties) {
263
- _logger.logger.debug('用户事件:', {
264
- eventName,
265
- properties
266
- });
267
- }
268
- constructor(errorConfig = {}){
269
- _define_property(this, "errorConfig", void 0);
270
- _define_property(this, "errorHandlers", []);
271
- _define_property(this, "performanceMetrics", {});
272
- _define_property(this, "unhandledRejectionHandler", void 0);
273
- _define_property(this, "errorHandler", void 0);
274
- _define_property(this, "errorRecords", []);
275
- _define_property(this, "errorAggregations", new Map());
276
- _define_property(this, "aggregationTimer", void 0);
277
- this.errorConfig = {
278
- autoCapture: errorConfig.autoCapture ?? true,
279
- onError: errorConfig.onError ?? (()=>{}),
280
- sampleRate: errorConfig.sampleRate ?? 1.0,
281
- showInConsole: errorConfig.showInConsole ?? true,
282
- enableAggregation: errorConfig.enableAggregation ?? true,
283
- aggregationWindow: errorConfig.aggregationWindow ?? 60000,
284
- maxErrorRecords: errorConfig.maxErrorRecords ?? 1000
285
- };
286
- if (this.errorConfig.autoCapture && typeof window !== 'undefined') {
287
- this.initErrorCapture();
288
- }
289
- // 启动错误聚合定时器
290
- if (this.errorConfig.enableAggregation) {
291
- this.startAggregationTimer();
292
- }
293
- }
294
- };
295
- /**
296
- * 默认监控服务实例
297
- */ let defaultMonitoringService = null;
298
- function initMonitoring(config) {
299
- if (!defaultMonitoringService) {
300
- defaultMonitoringService = new MonitoringService(config);
301
- }
302
- return defaultMonitoringService;
303
- }
304
- function getMonitoring() {
305
- if (!defaultMonitoringService) {
306
- return initMonitoring();
307
- }
308
- return defaultMonitoringService;
16
+ });
17
+ return from;
309
18
  }
310
19
 
311
20
  //# sourceMappingURL=monitoring.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/monitoring.ts"],"sourcesContent":["import { logger } from './logger';\nimport { errorUtils, type FrameworkError } from './errors';\nimport type { PerformanceMetrics, PerformanceMetricsWithUnits, PerformanceMetricValue } from './performance';\nimport { convertMetricsToWithUnits } from './performance';\n\n/**\n * 错误监控配置\n */\nexport interface ErrorMonitorConfig {\n /**\n * 是否自动捕获未处理的错误\n */\n autoCapture?: boolean;\n /**\n * 错误上报回调\n */\n onError?: (error: FrameworkError, context?: Record<string, unknown>) => void;\n /**\n * 采样率 (0-1)\n */\n sampleRate?: number;\n /**\n * 是否在控制台显示错误\n */\n showInConsole?: boolean;\n /**\n * 是否启用错误聚合\n */\n enableAggregation?: boolean;\n /**\n * 错误聚合窗口大小(毫秒)\n */\n aggregationWindow?: number;\n /**\n * 最大错误记录数\n */\n maxErrorRecords?: number;\n}\n\n/**\n * 错误聚合信息\n */\nexport interface ErrorAggregation {\n /**\n * 错误代码\n */\n code: string;\n /**\n * 错误消息\n */\n message: string;\n /**\n * 错误类型\n */\n type: string;\n /**\n * 错误数量\n */\n count: number;\n /**\n * 首次出现时间\n */\n firstOccurrence: number;\n /**\n * 最后出现时间\n */\n lastOccurrence: number;\n /**\n * 错误堆栈(示例)\n */\n stack?: string;\n /**\n * 错误上下文(示例)\n */\n context?: Record<string, unknown>;\n}\n\n/**\n * 监控服务类\n */\nexport class MonitoringService {\n private errorConfig: Required<ErrorMonitorConfig>;\n private errorHandlers: Array<(error: FrameworkError) => void> = [];\n private performanceMetrics: PerformanceMetricsWithUnits = {};\n private unhandledRejectionHandler?: (event: PromiseRejectionEvent) => void;\n private errorHandler?: (event: ErrorEvent) => void;\n private errorRecords: Array<{ error: FrameworkError; timestamp: number }> = [];\n private errorAggregations: Map<string, ErrorAggregation> = new Map();\n private aggregationTimer?: ReturnType<typeof setInterval>;\n\n constructor(errorConfig: ErrorMonitorConfig = {}) {\n this.errorConfig = {\n autoCapture: errorConfig.autoCapture ?? true,\n onError: errorConfig.onError ?? (() => {}),\n sampleRate: errorConfig.sampleRate ?? 1.0,\n showInConsole: errorConfig.showInConsole ?? true,\n enableAggregation: errorConfig.enableAggregation ?? true,\n aggregationWindow: errorConfig.aggregationWindow ?? 60000, // 1分钟\n maxErrorRecords: errorConfig.maxErrorRecords ?? 1000,\n };\n\n if (this.errorConfig.autoCapture && typeof window !== 'undefined') {\n this.initErrorCapture();\n }\n\n // 启动错误聚合定时器\n if (this.errorConfig.enableAggregation) {\n this.startAggregationTimer();\n }\n }\n\n /**\n * 初始化错误捕获\n */\n private initErrorCapture(): void {\n // 捕获未处理的 Promise 错误\n this.unhandledRejectionHandler = (event: PromiseRejectionEvent) => {\n const error = errorUtils.normalizeError(event.reason);\n this.captureError(error, {\n type: 'unhandledrejection',\n reason: event.reason,\n });\n };\n window.addEventListener('unhandledrejection', this.unhandledRejectionHandler);\n\n // 捕获全局错误\n this.errorHandler = (event: ErrorEvent) => {\n const error = errorUtils.normalizeError(event.error || new Error(event.message));\n this.captureError(error, {\n type: 'global',\n filename: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n });\n };\n window.addEventListener('error', this.errorHandler);\n }\n\n /**\n * 清理资源\n */\n destroy(): void {\n // 移除事件监听器\n if (typeof window !== 'undefined') {\n if (this.unhandledRejectionHandler) {\n window.removeEventListener('unhandledrejection', this.unhandledRejectionHandler);\n }\n if (this.errorHandler) {\n window.removeEventListener('error', this.errorHandler);\n }\n }\n\n // 停止聚合定时器\n if (this.aggregationTimer) {\n clearInterval(this.aggregationTimer);\n this.aggregationTimer = undefined;\n }\n\n // 清空错误处理器\n this.errorHandlers = [];\n this.errorRecords = [];\n this.errorAggregations.clear();\n }\n\n /**\n * 启动错误聚合定时器\n */\n private startAggregationTimer(): void {\n this.aggregationTimer = setInterval(() => {\n this.aggregateErrors();\n }, this.errorConfig.aggregationWindow!);\n }\n\n /**\n * 聚合错误\n */\n private aggregateErrors(): void {\n const now = Date.now();\n const windowStart = now - this.errorConfig.aggregationWindow!;\n\n // 过滤窗口内的错误\n const windowErrors = this.errorRecords.filter(\n (record) => record.timestamp >= windowStart\n );\n\n // 按错误代码聚合\n const aggregations = new Map<string, ErrorAggregation>();\n\n for (const record of windowErrors) {\n const error = record.error;\n const key = `${error.code}_${error.type}`;\n\n if (!aggregations.has(key)) {\n aggregations.set(key, {\n code: error.code,\n message: error.message,\n type: error.type,\n count: 0,\n firstOccurrence: record.timestamp,\n lastOccurrence: record.timestamp,\n stack: error.originalError?.stack,\n context: error.context,\n });\n }\n\n const agg = aggregations.get(key)!;\n agg.count++;\n agg.lastOccurrence = Math.max(agg.lastOccurrence, record.timestamp);\n }\n\n // 更新聚合结果\n this.errorAggregations = aggregations;\n }\n\n /**\n * 捕获错误\n */\n captureError(error: unknown, context?: Record<string, unknown>): void {\n // 采样检查\n if (Math.random() > this.errorConfig.sampleRate) {\n return;\n }\n\n const normalizedError = errorUtils.normalizeError(error);\n // 创建带上下文的错误对象(使用 Object.assign 来更新只读属性)\n const errorWithContext = Object.assign(normalizedError, {\n context: {\n ...normalizedError.context,\n ...context,\n timestamp: new Date().toISOString(),\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : undefined,\n url: typeof window !== 'undefined' ? window.location.href : undefined,\n },\n });\n\n // 记录错误\n const timestamp = Date.now();\n this.errorRecords.push({\n error: errorWithContext,\n timestamp,\n });\n\n // 限制错误记录数量\n if (this.errorRecords.length > this.errorConfig.maxErrorRecords!) {\n this.errorRecords.shift();\n }\n\n // 记录日志\n if (this.errorConfig.showInConsole) {\n logger.error('监控服务捕获到错误:', errorWithContext.toJSON());\n }\n\n // 调用错误回调\n this.errorConfig.onError(errorWithContext, context);\n\n // 调用注册的错误处理器\n this.errorHandlers.forEach((handler) => {\n try {\n handler(errorWithContext);\n } catch (e) {\n // 忽略处理器错误\n }\n });\n }\n\n /**\n * 获取错误聚合信息\n * \n * @param code - 错误代码(可选,如果提供则只返回该错误的聚合信息)\n * @returns 错误聚合信息\n */\n getErrorAggregations(code?: string): ErrorAggregation[] {\n if (code) {\n const aggregation = this.errorAggregations.get(code);\n return aggregation ? [aggregation] : [];\n }\n return Array.from(this.errorAggregations.values());\n }\n\n /**\n * 获取错误记录\n * \n * @param limit - 限制返回的记录数\n * @param since - 只返回此时间之后的错误\n * @returns 错误记录\n */\n getErrorRecords(limit?: number, since?: number): Array<{ error: FrameworkError; timestamp: number }> {\n let records = this.errorRecords;\n\n if (since) {\n records = records.filter((record) => record.timestamp >= since);\n }\n\n if (limit) {\n records = records.slice(-limit);\n }\n\n return [...records];\n }\n\n /**\n * 清空错误记录\n */\n clearErrorRecords(): void {\n this.errorRecords = [];\n this.errorAggregations.clear();\n }\n\n /**\n * 注册错误处理器\n */\n onError(handler: (error: FrameworkError) => void): () => void {\n this.errorHandlers.push(handler);\n return () => {\n const index = this.errorHandlers.indexOf(handler);\n if (index > -1) {\n this.errorHandlers.splice(index, 1);\n }\n };\n }\n\n /**\n * 上报性能指标\n */\n reportPerformance(metrics: PerformanceMetrics, context?: Record<string, unknown>): void {\n // 将传入的指标转换为带单位的格式\n const metricsWithUnits = convertMetricsToWithUnits(metrics);\n \n // 合并到现有指标中\n this.performanceMetrics = { ...this.performanceMetrics, ...metricsWithUnits };\n \n // 记录性能指标(带上下文)\n if (context) {\n logger.debug('性能指标更新:', { metrics: metricsWithUnits, context });\n } else {\n logger.debug('性能指标更新:', metricsWithUnits);\n }\n }\n\n /**\n * 批量上报性能指标\n */\n reportPerformanceBatch(metricsArray: Array<{ metrics: PerformanceMetrics; context?: Record<string, unknown> }>): void {\n for (const { metrics, context } of metricsArray) {\n this.reportPerformance(metrics, context);\n }\n }\n\n /**\n * 获取性能指标(带单位)\n */\n getPerformanceMetrics(): PerformanceMetricsWithUnits {\n return { ...this.performanceMetrics };\n }\n\n /**\n * 获取性能指标(原始数值格式,向后兼容)\n */\n getPerformanceMetricsRaw(): PerformanceMetrics {\n const result: PerformanceMetrics = {};\n \n for (const [key, metricValue] of Object.entries(this.performanceMetrics)) {\n if (metricValue && typeof metricValue === 'object' && 'value' in metricValue) {\n (result as Record<string, number>)[key] = (metricValue as PerformanceMetricValue).value;\n }\n }\n \n return result;\n }\n\n /**\n * 记录用户行为(匿名)\n */\n trackEvent(eventName: string, properties?: Record<string, unknown>): void {\n logger.debug('用户事件:', { eventName, properties });\n }\n}\n\n/**\n * 默认监控服务实例\n */\nlet defaultMonitoringService: MonitoringService | null = null;\n\n/**\n * 初始化默认监控服务\n */\nexport function initMonitoring(config?: ErrorMonitorConfig): MonitoringService {\n if (!defaultMonitoringService) {\n defaultMonitoringService = new MonitoringService(config);\n }\n return defaultMonitoringService;\n}\n\n/**\n * 获取默认监控服务\n */\nexport function getMonitoring(): MonitoringService {\n if (!defaultMonitoringService) {\n return initMonitoring();\n }\n return defaultMonitoringService;\n}\n"],"names":["MonitoringService","getMonitoring","initMonitoring","initErrorCapture","unhandledRejectionHandler","event","error","errorUtils","normalizeError","reason","captureError","type","window","addEventListener","errorHandler","Error","message","filename","lineno","colno","destroy","removeEventListener","aggregationTimer","clearInterval","undefined","errorHandlers","errorRecords","errorAggregations","clear","startAggregationTimer","setInterval","aggregateErrors","errorConfig","aggregationWindow","now","Date","windowStart","windowErrors","filter","record","timestamp","aggregations","Map","key","code","has","set","count","firstOccurrence","lastOccurrence","stack","originalError","context","agg","get","Math","max","random","sampleRate","normalizedError","errorWithContext","Object","assign","toISOString","userAgent","navigator","url","location","href","push","length","maxErrorRecords","shift","showInConsole","logger","toJSON","onError","forEach","handler","e","getErrorAggregations","aggregation","Array","from","values","getErrorRecords","limit","since","records","slice","clearErrorRecords","index","indexOf","splice","reportPerformance","metrics","metricsWithUnits","convertMetricsToWithUnits","performanceMetrics","debug","reportPerformanceBatch","metricsArray","getPerformanceMetrics","getPerformanceMetricsRaw","result","metricValue","entries","value","trackEvent","eventName","properties","autoCapture","enableAggregation","defaultMonitoringService","config"],"mappings":";;;;;;;;;;;QAgFaA;eAAAA;;QA4TGC;eAAAA;;QAVAC;eAAAA;;;wBAlYO;wBACyB;6BAEN;;;;;;;;;;;;;;AA6EnC,IAAA,AAAMF,oBAAN,MAAMA;IA+BX;;GAEC,GACD,AAAQG,mBAAyB;QAC/B,oBAAoB;QACpB,IAAI,CAACC,yBAAyB,GAAG,CAACC;YAChC,MAAMC,QAAQC,kBAAU,CAACC,cAAc,CAACH,MAAMI,MAAM;YACpD,IAAI,CAACC,YAAY,CAACJ,OAAO;gBACvBK,MAAM;gBACNF,QAAQJ,MAAMI,MAAM;YACtB;QACF;QACAG,OAAOC,gBAAgB,CAAC,sBAAsB,IAAI,CAACT,yBAAyB;QAE5E,SAAS;QACT,IAAI,CAACU,YAAY,GAAG,CAACT;YACnB,MAAMC,QAAQC,kBAAU,CAACC,cAAc,CAACH,MAAMC,KAAK,IAAI,IAAIS,MAAMV,MAAMW,OAAO;YAC9E,IAAI,CAACN,YAAY,CAACJ,OAAO;gBACvBK,MAAM;gBACNM,UAAUZ,MAAMY,QAAQ;gBACxBC,QAAQb,MAAMa,MAAM;gBACpBC,OAAOd,MAAMc,KAAK;YACpB;QACF;QACAP,OAAOC,gBAAgB,CAAC,SAAS,IAAI,CAACC,YAAY;IACpD;IAEA;;GAEC,GACDM,UAAgB;QACd,UAAU;QACV,IAAI,OAAOR,WAAW,aAAa;YACjC,IAAI,IAAI,CAACR,yBAAyB,EAAE;gBAClCQ,OAAOS,mBAAmB,CAAC,sBAAsB,IAAI,CAACjB,yBAAyB;YACjF;YACA,IAAI,IAAI,CAACU,YAAY,EAAE;gBACrBF,OAAOS,mBAAmB,CAAC,SAAS,IAAI,CAACP,YAAY;YACvD;QACF;QAEA,UAAU;QACV,IAAI,IAAI,CAACQ,gBAAgB,EAAE;YACzBC,cAAc,IAAI,CAACD,gBAAgB;YACnC,IAAI,CAACA,gBAAgB,GAAGE;QAC1B;QAEA,UAAU;QACV,IAAI,CAACC,aAAa,GAAG,EAAE;QACvB,IAAI,CAACC,YAAY,GAAG,EAAE;QACtB,IAAI,CAACC,iBAAiB,CAACC,KAAK;IAC9B;IAEA;;GAEC,GACD,AAAQC,wBAA8B;QACpC,IAAI,CAACP,gBAAgB,GAAGQ,YAAY;YAClC,IAAI,CAACC,eAAe;QACtB,GAAG,IAAI,CAACC,WAAW,CAACC,iBAAiB;IACvC;IAEA;;GAEC,GACD,AAAQF,kBAAwB;QAC9B,MAAMG,MAAMC,KAAKD,GAAG;QACpB,MAAME,cAAcF,MAAM,IAAI,CAACF,WAAW,CAACC,iBAAiB;QAE5D,WAAW;QACX,MAAMI,eAAe,IAAI,CAACX,YAAY,CAACY,MAAM,CAC3C,CAACC,SAAWA,OAAOC,SAAS,IAAIJ;QAGlC,UAAU;QACV,MAAMK,eAAe,IAAIC;QAEzB,KAAK,MAAMH,UAAUF,aAAc;YACjC,MAAM/B,QAAQiC,OAAOjC,KAAK;YAC1B,MAAMqC,MAAM,GAAGrC,MAAMsC,IAAI,CAAC,CAAC,EAAEtC,MAAMK,IAAI,EAAE;YAEzC,IAAI,CAAC8B,aAAaI,GAAG,CAACF,MAAM;gBAC1BF,aAAaK,GAAG,CAACH,KAAK;oBACpBC,MAAMtC,MAAMsC,IAAI;oBAChB5B,SAASV,MAAMU,OAAO;oBACtBL,MAAML,MAAMK,IAAI;oBAChBoC,OAAO;oBACPC,iBAAiBT,OAAOC,SAAS;oBACjCS,gBAAgBV,OAAOC,SAAS;oBAChCU,OAAO5C,MAAM6C,aAAa,EAAED;oBAC5BE,SAAS9C,MAAM8C,OAAO;gBACxB;YACF;YAEA,MAAMC,MAAMZ,aAAaa,GAAG,CAACX;YAC7BU,IAAIN,KAAK;YACTM,IAAIJ,cAAc,GAAGM,KAAKC,GAAG,CAACH,IAAIJ,cAAc,EAAEV,OAAOC,SAAS;QACpE;QAEA,SAAS;QACT,IAAI,CAACb,iBAAiB,GAAGc;IAC3B;IAEA;;GAEC,GACD/B,aAAaJ,KAAc,EAAE8C,OAAiC,EAAQ;QACpE,OAAO;QACP,IAAIG,KAAKE,MAAM,KAAK,IAAI,CAACzB,WAAW,CAAC0B,UAAU,EAAE;YAC/C;QACF;QAEA,MAAMC,kBAAkBpD,kBAAU,CAACC,cAAc,CAACF;QAClD,wCAAwC;QACxC,MAAMsD,mBAAmBC,OAAOC,MAAM,CAACH,iBAAiB;YACtDP,SAAS;gBACP,GAAGO,gBAAgBP,OAAO;gBAC1B,GAAGA,OAAO;gBACVZ,WAAW,IAAIL,OAAO4B,WAAW;gBACjCC,WAAW,OAAOC,cAAc,cAAcA,UAAUD,SAAS,GAAGxC;gBACpE0C,KAAK,OAAOtD,WAAW,cAAcA,OAAOuD,QAAQ,CAACC,IAAI,GAAG5C;YAC9D;QACF;QAEA,OAAO;QACP,MAAMgB,YAAYL,KAAKD,GAAG;QAC1B,IAAI,CAACR,YAAY,CAAC2C,IAAI,CAAC;YACrB/D,OAAOsD;YACPpB;QACF;QAEA,WAAW;QACX,IAAI,IAAI,CAACd,YAAY,CAAC4C,MAAM,GAAG,IAAI,CAACtC,WAAW,CAACuC,eAAe,EAAG;YAChE,IAAI,CAAC7C,YAAY,CAAC8C,KAAK;QACzB;QAEA,OAAO;QACP,IAAI,IAAI,CAACxC,WAAW,CAACyC,aAAa,EAAE;YAClCC,cAAM,CAACpE,KAAK,CAAC,cAAcsD,iBAAiBe,MAAM;QACpD;QAEA,SAAS;QACT,IAAI,CAAC3C,WAAW,CAAC4C,OAAO,CAAChB,kBAAkBR;QAE3C,aAAa;QACb,IAAI,CAAC3B,aAAa,CAACoD,OAAO,CAAC,CAACC;YAC1B,IAAI;gBACFA,QAAQlB;YACV,EAAE,OAAOmB,GAAG;YACV,UAAU;YACZ;QACF;IACF;IAEA;;;;;GAKC,GACDC,qBAAqBpC,IAAa,EAAsB;QACtD,IAAIA,MAAM;YACR,MAAMqC,cAAc,IAAI,CAACtD,iBAAiB,CAAC2B,GAAG,CAACV;YAC/C,OAAOqC,cAAc;gBAACA;aAAY,GAAG,EAAE;QACzC;QACA,OAAOC,MAAMC,IAAI,CAAC,IAAI,CAACxD,iBAAiB,CAACyD,MAAM;IACjD;IAEA;;;;;;GAMC,GACDC,gBAAgBC,KAAc,EAAEC,KAAc,EAAuD;QACnG,IAAIC,UAAU,IAAI,CAAC9D,YAAY;QAE/B,IAAI6D,OAAO;YACTC,UAAUA,QAAQlD,MAAM,CAAC,CAACC,SAAWA,OAAOC,SAAS,IAAI+C;QAC3D;QAEA,IAAID,OAAO;YACTE,UAAUA,QAAQC,KAAK,CAAC,CAACH;QAC3B;QAEA,OAAO;eAAIE;SAAQ;IACrB;IAEA;;GAEC,GACDE,oBAA0B;QACxB,IAAI,CAAChE,YAAY,GAAG,EAAE;QACtB,IAAI,CAACC,iBAAiB,CAACC,KAAK;IAC9B;IAEA;;GAEC,GACDgD,QAAQE,OAAwC,EAAc;QAC5D,IAAI,CAACrD,aAAa,CAAC4C,IAAI,CAACS;QACxB,OAAO;YACL,MAAMa,QAAQ,IAAI,CAAClE,aAAa,CAACmE,OAAO,CAACd;YACzC,IAAIa,QAAQ,CAAC,GAAG;gBACd,IAAI,CAAClE,aAAa,CAACoE,MAAM,CAACF,OAAO;YACnC;QACF;IACF;IAEA;;GAEC,GACDG,kBAAkBC,OAA2B,EAAE3C,OAAiC,EAAQ;QACtF,kBAAkB;QAClB,MAAM4C,mBAAmBC,IAAAA,sCAAyB,EAACF;QAEnD,WAAW;QACX,IAAI,CAACG,kBAAkB,GAAG;YAAE,GAAG,IAAI,CAACA,kBAAkB;YAAE,GAAGF,gBAAgB;QAAC;QAE5E,eAAe;QACf,IAAI5C,SAAS;YACXsB,cAAM,CAACyB,KAAK,CAAC,WAAW;gBAAEJ,SAASC;gBAAkB5C;YAAQ;QAC/D,OAAO;YACLsB,cAAM,CAACyB,KAAK,CAAC,WAAWH;QAC1B;IACF;IAEA;;GAEC,GACDI,uBAAuBC,YAAuF,EAAQ;QACpH,KAAK,MAAM,EAAEN,OAAO,EAAE3C,OAAO,EAAE,IAAIiD,aAAc;YAC/C,IAAI,CAACP,iBAAiB,CAACC,SAAS3C;QAClC;IACF;IAEA;;GAEC,GACDkD,wBAAqD;QACnD,OAAO;YAAE,GAAG,IAAI,CAACJ,kBAAkB;QAAC;IACtC;IAEA;;GAEC,GACDK,2BAA+C;QAC7C,MAAMC,SAA6B,CAAC;QAEpC,KAAK,MAAM,CAAC7D,KAAK8D,YAAY,IAAI5C,OAAO6C,OAAO,CAAC,IAAI,CAACR,kBAAkB,EAAG;YACxE,IAAIO,eAAe,OAAOA,gBAAgB,YAAY,WAAWA,aAAa;gBAC3ED,MAAiC,CAAC7D,IAAI,GAAG,AAAC8D,YAAuCE,KAAK;YACzF;QACF;QAEA,OAAOH;IACT;IAEA;;GAEC,GACDI,WAAWC,SAAiB,EAAEC,UAAoC,EAAQ;QACxEpC,cAAM,CAACyB,KAAK,CAAC,SAAS;YAAEU;YAAWC;QAAW;IAChD;IA7RA,YAAY9E,cAAkC,CAAC,CAAC,CAAE;QATlD,uBAAQA,eAAR,KAAA;QACA,uBAAQP,iBAAwD,EAAE;QAClE,uBAAQyE,sBAAkD,CAAC;QAC3D,uBAAQ9F,6BAAR,KAAA;QACA,uBAAQU,gBAAR,KAAA;QACA,uBAAQY,gBAAoE,EAAE;QAC9E,uBAAQC,qBAAmD,IAAIe;QAC/D,uBAAQpB,oBAAR,KAAA;QAGE,IAAI,CAACU,WAAW,GAAG;YACjB+E,aAAa/E,YAAY+E,WAAW,IAAI;YACxCnC,SAAS5C,YAAY4C,OAAO,IAAK,CAAA,KAAO,CAAA;YACxClB,YAAY1B,YAAY0B,UAAU,IAAI;YACtCe,eAAezC,YAAYyC,aAAa,IAAI;YAC5CuC,mBAAmBhF,YAAYgF,iBAAiB,IAAI;YACpD/E,mBAAmBD,YAAYC,iBAAiB,IAAI;YACpDsC,iBAAiBvC,YAAYuC,eAAe,IAAI;QAClD;QAEA,IAAI,IAAI,CAACvC,WAAW,CAAC+E,WAAW,IAAI,OAAOnG,WAAW,aAAa;YACjE,IAAI,CAACT,gBAAgB;QACvB;QAEA,YAAY;QACZ,IAAI,IAAI,CAAC6B,WAAW,CAACgF,iBAAiB,EAAE;YACtC,IAAI,CAACnF,qBAAqB;QAC5B;IACF;AA2QF;AAEA;;CAEC,GACD,IAAIoF,2BAAqD;AAKlD,SAAS/G,eAAegH,MAA2B;IACxD,IAAI,CAACD,0BAA0B;QAC7BA,2BAA2B,IAAIjH,kBAAkBkH;IACnD;IACA,OAAOD;AACT;AAKO,SAAShH;IACd,IAAI,CAACgH,0BAA0B;QAC7B,OAAO/G;IACT;IACA,OAAO+G;AACT"}
1
+ {"version":3,"sources":["../../src/utils/monitoring.ts"],"sourcesContent":["export * from '@vlian/monitoring';\n"],"names":[],"mappings":";;;;qBAAc"}
@@ -1,163 +1 @@
1
- import { type FrameworkError } from './errors';
2
- import type { PerformanceMetrics, PerformanceMetricsWithUnits } from './performance';
3
- /**
4
- * 错误监控配置
5
- */
6
- export interface ErrorMonitorConfig {
7
- /**
8
- * 是否自动捕获未处理的错误
9
- */
10
- autoCapture?: boolean;
11
- /**
12
- * 错误上报回调
13
- */
14
- onError?: (error: FrameworkError, context?: Record<string, unknown>) => void;
15
- /**
16
- * 采样率 (0-1)
17
- */
18
- sampleRate?: number;
19
- /**
20
- * 是否在控制台显示错误
21
- */
22
- showInConsole?: boolean;
23
- /**
24
- * 是否启用错误聚合
25
- */
26
- enableAggregation?: boolean;
27
- /**
28
- * 错误聚合窗口大小(毫秒)
29
- */
30
- aggregationWindow?: number;
31
- /**
32
- * 最大错误记录数
33
- */
34
- maxErrorRecords?: number;
35
- }
36
- /**
37
- * 错误聚合信息
38
- */
39
- export interface ErrorAggregation {
40
- /**
41
- * 错误代码
42
- */
43
- code: string;
44
- /**
45
- * 错误消息
46
- */
47
- message: string;
48
- /**
49
- * 错误类型
50
- */
51
- type: string;
52
- /**
53
- * 错误数量
54
- */
55
- count: number;
56
- /**
57
- * 首次出现时间
58
- */
59
- firstOccurrence: number;
60
- /**
61
- * 最后出现时间
62
- */
63
- lastOccurrence: number;
64
- /**
65
- * 错误堆栈(示例)
66
- */
67
- stack?: string;
68
- /**
69
- * 错误上下文(示例)
70
- */
71
- context?: Record<string, unknown>;
72
- }
73
- /**
74
- * 监控服务类
75
- */
76
- export declare class MonitoringService {
77
- private errorConfig;
78
- private errorHandlers;
79
- private performanceMetrics;
80
- private unhandledRejectionHandler?;
81
- private errorHandler?;
82
- private errorRecords;
83
- private errorAggregations;
84
- private aggregationTimer?;
85
- constructor(errorConfig?: ErrorMonitorConfig);
86
- /**
87
- * 初始化错误捕获
88
- */
89
- private initErrorCapture;
90
- /**
91
- * 清理资源
92
- */
93
- destroy(): void;
94
- /**
95
- * 启动错误聚合定时器
96
- */
97
- private startAggregationTimer;
98
- /**
99
- * 聚合错误
100
- */
101
- private aggregateErrors;
102
- /**
103
- * 捕获错误
104
- */
105
- captureError(error: unknown, context?: Record<string, unknown>): void;
106
- /**
107
- * 获取错误聚合信息
108
- *
109
- * @param code - 错误代码(可选,如果提供则只返回该错误的聚合信息)
110
- * @returns 错误聚合信息
111
- */
112
- getErrorAggregations(code?: string): ErrorAggregation[];
113
- /**
114
- * 获取错误记录
115
- *
116
- * @param limit - 限制返回的记录数
117
- * @param since - 只返回此时间之后的错误
118
- * @returns 错误记录
119
- */
120
- getErrorRecords(limit?: number, since?: number): Array<{
121
- error: FrameworkError;
122
- timestamp: number;
123
- }>;
124
- /**
125
- * 清空错误记录
126
- */
127
- clearErrorRecords(): void;
128
- /**
129
- * 注册错误处理器
130
- */
131
- onError(handler: (error: FrameworkError) => void): () => void;
132
- /**
133
- * 上报性能指标
134
- */
135
- reportPerformance(metrics: PerformanceMetrics, context?: Record<string, unknown>): void;
136
- /**
137
- * 批量上报性能指标
138
- */
139
- reportPerformanceBatch(metricsArray: Array<{
140
- metrics: PerformanceMetrics;
141
- context?: Record<string, unknown>;
142
- }>): void;
143
- /**
144
- * 获取性能指标(带单位)
145
- */
146
- getPerformanceMetrics(): PerformanceMetricsWithUnits;
147
- /**
148
- * 获取性能指标(原始数值格式,向后兼容)
149
- */
150
- getPerformanceMetricsRaw(): PerformanceMetrics;
151
- /**
152
- * 记录用户行为(匿名)
153
- */
154
- trackEvent(eventName: string, properties?: Record<string, unknown>): void;
155
- }
156
- /**
157
- * 初始化默认监控服务
158
- */
159
- export declare function initMonitoring(config?: ErrorMonitorConfig): MonitoringService;
160
- /**
161
- * 获取默认监控服务
162
- */
163
- export declare function getMonitoring(): MonitoringService;
1
+ export * from '@vlian/monitoring';