@vlian/framework 1.2.25 → 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 (213) 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/router/monitoring/RouterMonitoring.cjs +1 -1
  7. package/dist/core/router/monitoring/RouterMonitoring.cjs.map +1 -1
  8. package/dist/core/router/monitoring/RouterMonitoring.js +1 -1
  9. package/dist/core/router/monitoring/RouterMonitoring.js.map +1 -1
  10. package/dist/core/router/utils/adapters/react-router/transform.cjs +4 -0
  11. package/dist/core/router/utils/adapters/react-router/transform.cjs.map +1 -1
  12. package/dist/core/router/utils/adapters/react-router/transform.js +4 -0
  13. package/dist/core/router/utils/adapters/react-router/transform.js.map +1 -1
  14. package/dist/core/startup/initializeServices.cjs +1 -1
  15. package/dist/core/startup/initializeServices.cjs.map +1 -1
  16. package/dist/core/startup/initializeServices.d.ts +1 -1
  17. package/dist/core/startup/initializeServices.js +1 -1
  18. package/dist/core/startup/initializeServices.js.map +1 -1
  19. package/dist/core/startup/performanceTracker.cjs.map +1 -1
  20. package/dist/core/startup/performanceTracker.d.ts +1 -1
  21. package/dist/core/startup/performanceTracker.js.map +1 -1
  22. package/dist/core/startup/renderApp.cjs +1 -1
  23. package/dist/core/startup/renderApp.cjs.map +1 -1
  24. package/dist/core/startup/renderApp.d.ts +1 -1
  25. package/dist/core/startup/renderApp.js +1 -1
  26. package/dist/core/startup/renderApp.js.map +1 -1
  27. package/dist/core/startup/startApp.cjs +2 -2
  28. package/dist/core/startup/startApp.cjs.map +1 -1
  29. package/dist/core/startup/startApp.js +3 -3
  30. package/dist/core/startup/startApp.js.map +1 -1
  31. package/dist/core/types.d.ts +1 -1
  32. package/dist/core/types.js.map +1 -1
  33. package/dist/index.cjs +15 -2
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.ts +6 -4
  36. package/dist/index.js +5 -4
  37. package/dist/index.js.map +1 -1
  38. package/dist/index.umd.js +11648 -32616
  39. package/dist/index.umd.js.map +1 -1
  40. package/dist/kernel/constants.cjs +67 -0
  41. package/dist/kernel/constants.cjs.map +1 -0
  42. package/dist/kernel/constants.d.ts +5 -0
  43. package/dist/kernel/constants.js +43 -0
  44. package/dist/kernel/constants.js.map +1 -0
  45. package/dist/kernel/index.cjs +40 -0
  46. package/dist/kernel/index.cjs.map +1 -0
  47. package/dist/kernel/index.d.ts +3 -0
  48. package/dist/kernel/index.js +4 -0
  49. package/dist/kernel/index.js.map +1 -0
  50. package/dist/kernel/kernel.cjs +296 -0
  51. package/dist/kernel/kernel.cjs.map +1 -0
  52. package/dist/kernel/kernel.d.ts +40 -0
  53. package/dist/kernel/kernel.js +272 -0
  54. package/dist/kernel/kernel.js.map +1 -0
  55. package/dist/kernel/manager/cacheManager.cjs +46 -0
  56. package/dist/kernel/manager/cacheManager.cjs.map +1 -0
  57. package/dist/kernel/manager/cacheManager.d.ts +6 -0
  58. package/dist/kernel/manager/cacheManager.js +36 -0
  59. package/dist/kernel/manager/cacheManager.js.map +1 -0
  60. package/dist/kernel/manager/i18nManager.cjs +68 -0
  61. package/dist/kernel/manager/i18nManager.cjs.map +1 -0
  62. package/dist/kernel/manager/i18nManager.d.ts +8 -0
  63. package/dist/kernel/manager/i18nManager.js +58 -0
  64. package/dist/kernel/manager/i18nManager.js.map +1 -0
  65. package/dist/kernel/manager/index.cjs +30 -0
  66. package/dist/kernel/manager/index.cjs.map +1 -0
  67. package/dist/kernel/manager/index.d.ts +4 -0
  68. package/dist/kernel/manager/index.js +6 -0
  69. package/dist/kernel/manager/index.js.map +1 -0
  70. package/dist/kernel/manager/loggerManager.cjs +70 -0
  71. package/dist/kernel/manager/loggerManager.cjs.map +1 -0
  72. package/dist/kernel/manager/loggerManager.d.ts +14 -0
  73. package/dist/kernel/manager/loggerManager.js +60 -0
  74. package/dist/kernel/manager/loggerManager.js.map +1 -0
  75. package/dist/kernel/manager/persistence.cjs +93 -0
  76. package/dist/kernel/manager/persistence.cjs.map +1 -0
  77. package/dist/kernel/manager/persistence.d.ts +3 -0
  78. package/dist/kernel/manager/persistence.js +75 -0
  79. package/dist/kernel/manager/persistence.js.map +1 -0
  80. package/dist/kernel/manager/themeManager.cjs +85 -0
  81. package/dist/kernel/manager/themeManager.cjs.map +1 -0
  82. package/dist/kernel/manager/themeManager.d.ts +9 -0
  83. package/dist/kernel/manager/themeManager.js +75 -0
  84. package/dist/kernel/manager/themeManager.js.map +1 -0
  85. package/dist/kernel/types.cjs +6 -0
  86. package/dist/kernel/types.cjs.map +1 -0
  87. package/dist/kernel/types.d.ts +72 -0
  88. package/dist/kernel/types.js +3 -0
  89. package/dist/kernel/types.js.map +1 -0
  90. package/dist/request/adapter.d.ts +1 -0
  91. package/dist/request/core.d.ts +1 -0
  92. package/dist/request/index.d.ts +1 -42
  93. package/dist/request/plugin/csrfPlugin.d.ts +2 -2
  94. package/dist/request/plugin/queue.d.ts +2 -2
  95. package/dist/request/plugin.d.ts +1 -0
  96. package/dist/request/runtime.d.ts +1 -0
  97. package/dist/request/types.d.ts +1 -394
  98. package/dist/request/utils.d.ts +1 -0
  99. package/dist/state.umd.js +1 -1
  100. package/dist/utils/csrf.cjs +13 -152
  101. package/dist/utils/csrf.cjs.map +1 -1
  102. package/dist/utils/csrf.d.ts +1 -72
  103. package/dist/utils/csrf.js +1 -142
  104. package/dist/utils/csrf.js.map +1 -1
  105. package/dist/utils/errors/ErrorCodes.cjs +6 -76
  106. package/dist/utils/errors/ErrorCodes.cjs.map +1 -1
  107. package/dist/utils/errors/ErrorCodes.d.ts +1 -45
  108. package/dist/utils/errors/ErrorCodes.js +1 -84
  109. package/dist/utils/errors/ErrorCodes.js.map +1 -1
  110. package/dist/utils/errors.cjs +15 -344
  111. package/dist/utils/errors.cjs.map +1 -1
  112. package/dist/utils/errors.d.ts +1 -183
  113. package/dist/utils/errors.js +1 -352
  114. package/dist/utils/errors.js.map +1 -1
  115. package/dist/utils/logger.cjs +5 -374
  116. package/dist/utils/logger.cjs.map +1 -1
  117. package/dist/utils/logger.d.ts +2 -189
  118. package/dist/utils/logger.js +1 -379
  119. package/dist/utils/logger.js.map +1 -1
  120. package/dist/utils/logger.types.cjs +3 -12
  121. package/dist/utils/logger.types.cjs.map +1 -1
  122. package/dist/utils/logger.types.d.ts +2 -57
  123. package/dist/utils/logger.types.js +1 -10
  124. package/dist/utils/logger.types.js.map +1 -1
  125. package/dist/utils/monitoring.cjs +11 -302
  126. package/dist/utils/monitoring.cjs.map +1 -1
  127. package/dist/utils/monitoring.d.ts +1 -163
  128. package/dist/utils/monitoring.js +1 -294
  129. package/dist/utils/monitoring.js.map +1 -1
  130. package/dist/utils/performance.cjs +5 -352
  131. package/dist/utils/performance.cjs.map +1 -1
  132. package/dist/utils/performance.d.ts +2 -246
  133. package/dist/utils/performance.js +1 -354
  134. package/dist/utils/performance.js.map +1 -1
  135. package/dist/utils/resourceLoader.cjs +5 -303
  136. package/dist/utils/resourceLoader.cjs.map +1 -1
  137. package/dist/utils/resourceLoader.d.ts +2 -130
  138. package/dist/utils/resourceLoader.js +1 -305
  139. package/dist/utils/resourceLoader.js.map +1 -1
  140. package/dist/utils/runtimeSecurity.cjs +2 -140
  141. package/dist/utils/runtimeSecurity.cjs.map +1 -1
  142. package/dist/utils/runtimeSecurity.d.ts +2 -104
  143. package/dist/utils/runtimeSecurity.js +1 -141
  144. package/dist/utils/runtimeSecurity.js.map +1 -1
  145. package/dist/utils/security.cjs +3 -314
  146. package/dist/utils/security.cjs.map +1 -1
  147. package/dist/utils/security.d.ts +2 -80
  148. package/dist/utils/security.js +1 -311
  149. package/dist/utils/security.js.map +1 -1
  150. package/dist/utils/traceId.cjs +10 -111
  151. package/dist/utils/traceId.cjs.map +1 -1
  152. package/dist/utils/traceId.d.ts +1 -63
  153. package/dist/utils/traceId.js +1 -116
  154. package/dist/utils/traceId.js.map +1 -1
  155. package/dist/utils/validation.cjs +3 -173
  156. package/dist/utils/validation.cjs.map +1 -1
  157. package/dist/utils/validation.d.ts +2 -110
  158. package/dist/utils/validation.js +1 -175
  159. package/dist/utils/validation.js.map +1 -1
  160. package/package.json +15 -24
  161. package/dist/lazy/index.cjs +0 -104
  162. package/dist/lazy/index.cjs.map +0 -1
  163. package/dist/lazy/index.d.ts +0 -19
  164. package/dist/lazy/index.js +0 -24
  165. package/dist/lazy/index.js.map +0 -1
  166. package/dist/request/adapter/RequestAdapter.cjs +0 -78
  167. package/dist/request/adapter/RequestAdapter.cjs.map +0 -1
  168. package/dist/request/adapter/axiosAdapter.cjs +0 -164
  169. package/dist/request/adapter/axiosAdapter.cjs.map +0 -1
  170. package/dist/request/adapter/fetchAdapter.cjs +0 -134
  171. package/dist/request/adapter/fetchAdapter.cjs.map +0 -1
  172. package/dist/request/adapter/index.cjs +0 -80
  173. package/dist/request/adapter/index.cjs.map +0 -1
  174. package/dist/request/adapter/kyAdapter.cjs +0 -191
  175. package/dist/request/adapter/kyAdapter.cjs.map +0 -1
  176. package/dist/request/adapter/undiciAdapter.cjs +0 -213
  177. package/dist/request/adapter/undiciAdapter.cjs.map +0 -1
  178. package/dist/request/core/RequestClient.cjs +0 -558
  179. package/dist/request/core/RequestClient.cjs.map +0 -1
  180. package/dist/request/core/index.cjs +0 -15
  181. package/dist/request/core/index.cjs.map +0 -1
  182. package/dist/request/index.cjs +0 -149
  183. package/dist/request/index.cjs.map +0 -1
  184. package/dist/request/plugin/RequestPlugin.cjs +0 -218
  185. package/dist/request/plugin/RequestPlugin.cjs.map +0 -1
  186. package/dist/request/plugin/cache.cjs +0 -269
  187. package/dist/request/plugin/cache.cjs.map +0 -1
  188. package/dist/request/plugin/csrfPlugin.cjs +0 -40
  189. package/dist/request/plugin/csrfPlugin.cjs.map +0 -1
  190. package/dist/request/plugin/index.cjs +0 -53
  191. package/dist/request/plugin/index.cjs.map +0 -1
  192. package/dist/request/plugin/monitoring.cjs +0 -216
  193. package/dist/request/plugin/monitoring.cjs.map +0 -1
  194. package/dist/request/plugin/queue.cjs +0 -140
  195. package/dist/request/plugin/queue.cjs.map +0 -1
  196. package/dist/request/plugin/retry.cjs +0 -98
  197. package/dist/request/plugin/retry.cjs.map +0 -1
  198. package/dist/request/plugin/validation.cjs +0 -121
  199. package/dist/request/plugin/validation.cjs.map +0 -1
  200. package/dist/request/runtime/RequestContext.cjs +0 -77
  201. package/dist/request/runtime/RequestContext.cjs.map +0 -1
  202. package/dist/request/runtime/index.cjs +0 -32
  203. package/dist/request/runtime/index.cjs.map +0 -1
  204. package/dist/request/types.cjs +0 -112
  205. package/dist/request/types.cjs.map +0 -1
  206. package/dist/request/utils/RequestQueueManager.cjs +0 -168
  207. package/dist/request/utils/RequestQueueManager.cjs.map +0 -1
  208. package/dist/request/utils/dependencyCheck.cjs +0 -237
  209. package/dist/request/utils/dependencyCheck.cjs.map +0 -1
  210. package/dist/request/utils/index.cjs +0 -30
  211. package/dist/request/utils/index.cjs.map +0 -1
  212. package/dist/request.umd.js +0 -5392
  213. package/dist/request.umd.js.map +0 -1
@@ -1,356 +1,3 @@
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
- */ export const PERFORMANCE_METRIC_UNITS = {
17
- /**
18
- * 毫秒单位
19
- */ ms: 'ms',
20
- /**
21
- * 无单位(分数)
22
- */ none: ''
23
- };
24
- /**
25
- * 性能监控类
26
- */ export class PerformanceMonitor {
27
- /**
28
- * 初始化 Web Vitals 收集
29
- */ initWebVitals() {
30
- // 采样检查移到每次上报时进行,而不是初始化时
31
- // 这样可以确保监控功能始终初始化,只是选择性上报
32
- // 首次内容绘制 (FCP)
33
- this.observePaint('first-contentful-paint', (entry)=>{
34
- if (Math.random() <= this.config.sampleRate) {
35
- this.metrics.fcp = Math.round(entry.startTime);
36
- this.reportInternal();
37
- }
38
- });
39
- // 最大内容绘制 (LCP)
40
- this.observeLCP();
41
- // 首次输入延迟 (FID)
42
- this.observeFID();
43
- // 累积布局偏移 (CLS)
44
- this.observeCLS();
45
- // 可交互时间 (TTI) - 需要计算(延迟到页面加载完成后)
46
- if (typeof window !== 'undefined' && document.readyState === 'complete') {
47
- this.calculateTTI();
48
- } else if (typeof window !== 'undefined') {
49
- window.addEventListener('load', ()=>{
50
- // 使用 requestIdleCallback 在空闲时计算
51
- if (typeof requestIdleCallback !== 'undefined') {
52
- requestIdleCallback(()=>{
53
- this.calculateTTI();
54
- }, {
55
- timeout: 2000
56
- });
57
- } else {
58
- setTimeout(()=>{
59
- this.calculateTTI();
60
- }, 1000);
61
- }
62
- });
63
- }
64
- }
65
- /**
66
- * 观察 Paint 指标
67
- */ observePaint(name, callback) {
68
- if (typeof PerformanceObserver === 'undefined') {
69
- return;
70
- }
71
- try {
72
- const observer = new PerformanceObserver((list)=>{
73
- for (const entry of list.getEntries()){
74
- if (entry.name === name) {
75
- callback(entry);
76
- observer.disconnect();
77
- }
78
- }
79
- });
80
- observer.observe({
81
- entryTypes: [
82
- 'paint'
83
- ]
84
- });
85
- this.observers.push(observer);
86
- } catch (e) {
87
- // PerformanceObserver 不支持或已断开
88
- }
89
- }
90
- /**
91
- * 观察 LCP
92
- */ observeLCP() {
93
- if (typeof PerformanceObserver === 'undefined') {
94
- return;
95
- }
96
- try {
97
- const observer = new PerformanceObserver((list)=>{
98
- const entries = list.getEntries();
99
- const lastEntry = entries[entries.length - 1];
100
- const lcpValue = Math.round(lastEntry.renderTime || lastEntry.loadTime || lastEntry.startTime);
101
- // 采样检查和异常值检查
102
- if (Math.random() <= this.config.sampleRate && lcpValue > 0 && lcpValue < 60000) {
103
- this.metrics.lcp = lcpValue;
104
- this.reportInternal();
105
- }
106
- });
107
- observer.observe({
108
- entryTypes: [
109
- 'largest-contentful-paint'
110
- ]
111
- });
112
- this.observers.push(observer);
113
- } catch (e) {
114
- // PerformanceObserver 不支持
115
- }
116
- }
117
- /**
118
- * 观察 FID
119
- */ observeFID() {
120
- if (typeof PerformanceObserver === 'undefined') {
121
- return;
122
- }
123
- try {
124
- const observer = new PerformanceObserver((list)=>{
125
- for (const entry of list.getEntries()){
126
- const fidEntry = entry;
127
- const fidValue = Math.round(fidEntry.processingStart - fidEntry.startTime);
128
- // 采样检查和异常值检查
129
- if (Math.random() <= this.config.sampleRate && fidValue >= 0 && fidValue < 10000) {
130
- this.metrics.fid = fidValue;
131
- this.reportInternal();
132
- }
133
- observer.disconnect();
134
- }
135
- });
136
- observer.observe({
137
- entryTypes: [
138
- 'first-input'
139
- ]
140
- });
141
- this.observers.push(observer);
142
- } catch (e) {
143
- // PerformanceObserver 不支持
144
- }
145
- }
146
- /**
147
- * 观察 CLS
148
- */ observeCLS() {
149
- if (typeof PerformanceObserver === 'undefined') {
150
- return;
151
- }
152
- let clsValue = 0;
153
- let clsEntries = [];
154
- try {
155
- const observer = new PerformanceObserver((list)=>{
156
- for (const entry of list.getEntries()){
157
- if (!entry.hadRecentInput) {
158
- const firstSessionEntry = clsEntries[0];
159
- const lastSessionEntry = clsEntries[clsEntries.length - 1];
160
- if (!firstSessionEntry || entry.startTime - lastSessionEntry.startTime < 1000 || entry.startTime - firstSessionEntry.startTime > 5000) {
161
- clsEntries = [
162
- entry
163
- ];
164
- clsValue = entry.value;
165
- } else {
166
- clsEntries.push(entry);
167
- clsValue += entry.value;
168
- }
169
- const roundedValue = Math.round(clsValue * 1000) / 1000;
170
- // 采样检查和异常值检查
171
- if (Math.random() <= this.config.sampleRate && roundedValue >= 0 && roundedValue < 1) {
172
- this.metrics.cls = roundedValue;
173
- this.reportInternal();
174
- }
175
- }
176
- }
177
- });
178
- observer.observe({
179
- entryTypes: [
180
- 'layout-shift'
181
- ]
182
- });
183
- this.observers.push(observer);
184
- } catch (e) {
185
- // PerformanceObserver 不支持
186
- }
187
- }
188
- /**
189
- * 计算 TTI
190
- */ calculateTTI() {
191
- if (typeof window === 'undefined' || !window.performance) {
192
- return;
193
- }
194
- try {
195
- const navigation = performance.getEntriesByType('navigation')[0];
196
- if (navigation) {
197
- const ttiValue = Math.round(navigation.domInteractive - navigation.fetchStart);
198
- // 采样检查和异常值检查
199
- if (Math.random() <= this.config.sampleRate && ttiValue > 0 && ttiValue < 60000) {
200
- this.metrics.tti = ttiValue;
201
- this.reportInternal();
202
- }
203
- }
204
- } catch (e) {
205
- // 忽略错误
206
- }
207
- }
208
- /**
209
- * 内部上报性能指标(自动上报当前指标)
210
- */ reportInternal() {
211
- if (this.config.onReport) {
212
- // 创建指标的副本,避免外部修改影响内部状态
213
- const metricsCopy = {};
214
- if (this.metrics.fcp !== undefined) metricsCopy.fcp = this.metrics.fcp;
215
- if (this.metrics.lcp !== undefined) metricsCopy.lcp = this.metrics.lcp;
216
- if (this.metrics.fid !== undefined) metricsCopy.fid = this.metrics.fid;
217
- if (this.metrics.cls !== undefined) metricsCopy.cls = this.metrics.cls;
218
- if (this.metrics.tti !== undefined) metricsCopy.tti = this.metrics.tti;
219
- if (this.metrics.tbt !== undefined) metricsCopy.tbt = this.metrics.tbt;
220
- if (this.metrics.si !== undefined) metricsCopy.si = this.metrics.si;
221
- this.config.onReport(metricsCopy);
222
- }
223
- }
224
- /**
225
- * 获取当前性能指标
226
- */ getMetrics() {
227
- return {
228
- ...this.metrics
229
- };
230
- }
231
- /**
232
- * 手动记录自定义指标
233
- */ recordMetric(name, value) {
234
- this.metrics[name] = value;
235
- this.reportInternal();
236
- }
237
- /**
238
- * 清理观察者
239
- */ disconnect() {
240
- this.observers.forEach((observer)=>observer.disconnect());
241
- this.observers = [];
242
- // 停止聚合定时器
243
- if (this.aggregationTimer) {
244
- clearInterval(this.aggregationTimer);
245
- this.aggregationTimer = undefined;
246
- }
247
- // 停止自动上报定时器
248
- if (this.autoReportTimer) {
249
- clearInterval(this.autoReportTimer);
250
- this.autoReportTimer = undefined;
251
- }
252
- }
253
- /**
254
- * 启动性能指标聚合
255
- */ startAggregation() {
256
- this.aggregationTimer = setInterval(()=>{
257
- this.aggregateMetrics();
258
- }, this.config.aggregationWindow);
259
- }
260
- /**
261
- * 聚合性能指标
262
- */ aggregateMetrics() {
263
- // 计算平均值、最大值、最小值等统计信息
264
- // 这里简化实现,实际可以根据需要扩展
265
- this.aggregatedMetrics = {
266
- ...this.metrics
267
- };
268
- }
269
- /**
270
- * 获取聚合后的性能指标
271
- */ getAggregatedMetrics() {
272
- return {
273
- ...this.aggregatedMetrics
274
- };
275
- }
276
- /**
277
- * 启动自动上报
278
- */ startAutoReport() {
279
- this.autoReportTimer = setInterval(()=>{
280
- const metrics = this.config.enableAggregation ? this.getAggregatedMetrics() : this.getMetrics();
281
- this.config.onReport(metrics);
282
- }, this.config.autoReportInterval);
283
- }
284
- /**
285
- * 手动上报性能指标
286
- */ report(metrics) {
287
- const metricsToReport = metrics || this.getMetrics();
288
- this.config.onReport(metricsToReport);
289
- }
290
- constructor(config = {}){
291
- _define_property(this, "config", void 0);
292
- _define_property(this, "metrics", {});
293
- _define_property(this, "observers", []);
294
- _define_property(this, "aggregatedMetrics", {});
295
- _define_property(this, "aggregationTimer", void 0);
296
- _define_property(this, "autoReportTimer", void 0);
297
- this.config = {
298
- collectWebVitals: config.collectWebVitals ?? true,
299
- onReport: config.onReport ?? (()=>{}),
300
- sampleRate: config.sampleRate ?? 1.0,
301
- enableAggregation: config.enableAggregation ?? false,
302
- aggregationWindow: config.aggregationWindow ?? 60000,
303
- autoReport: config.autoReport ?? false,
304
- autoReportInterval: config.autoReportInterval ?? 300000
305
- };
306
- if (this.config.collectWebVitals && typeof window !== 'undefined') {
307
- this.initWebVitals();
308
- }
309
- // 启动性能指标聚合
310
- if (this.config.enableAggregation) {
311
- this.startAggregation();
312
- }
313
- // 启动自动上报
314
- if (this.config.autoReport) {
315
- this.startAutoReport();
316
- }
317
- }
318
- }
319
- /**
320
- * 性能指标单位映射(包含所有可能的指标键)
321
- */ export const PERFORMANCE_METRIC_UNIT_MAP = {
322
- // Web Vitals 指标
323
- fcp: PERFORMANCE_METRIC_UNITS.ms,
324
- lcp: PERFORMANCE_METRIC_UNITS.ms,
325
- fid: PERFORMANCE_METRIC_UNITS.ms,
326
- cls: PERFORMANCE_METRIC_UNITS.none,
327
- tti: PERFORMANCE_METRIC_UNITS.ms,
328
- tbt: PERFORMANCE_METRIC_UNITS.ms,
329
- si: PERFORMANCE_METRIC_UNITS.ms,
330
- // 启动性能指标
331
- serviceInitDuration: PERFORMANCE_METRIC_UNITS.ms,
332
- initializationDuration: PERFORMANCE_METRIC_UNITS.ms,
333
- firstRenderDuration: PERFORMANCE_METRIC_UNITS.ms,
334
- totalStartupDuration: PERFORMANCE_METRIC_UNITS.ms
335
- };
336
- /**
337
- * 将性能指标转换为带单位的格式
338
- *
339
- * @param metrics - 性能指标对象(可能包含 Web Vitals 和启动性能指标)
340
- * @returns 带单位的性能指标对象
341
- */ export function convertMetricsToWithUnits(metrics) {
342
- const result = {};
343
- for (const [key, value] of Object.entries(metrics)){
344
- if (value !== undefined && value !== null && typeof value === 'number') {
345
- // 从映射中获取单位,如果没有映射则默认为毫秒
346
- const unit = PERFORMANCE_METRIC_UNIT_MAP[key] || PERFORMANCE_METRIC_UNITS.ms;
347
- result[key] = {
348
- value,
349
- unit
350
- };
351
- }
352
- }
353
- return result;
354
- }
1
+ export { PerformanceMonitor, PERFORMANCE_METRIC_UNITS, convertMetricsToWithUnits } from "@vlian/utils";
355
2
 
356
3
  //# sourceMappingURL=performance.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/performance.ts"],"sourcesContent":["/**\n * 性能指标单位常量\n */\nexport const PERFORMANCE_METRIC_UNITS = {\n /**\n * 毫秒单位\n */\n ms: 'ms',\n /**\n * 无单位(分数)\n */\n none: '',\n} as const;\n\n/**\n * 性能指标单位类型\n */\nexport type PerformanceMetricUnit = typeof PERFORMANCE_METRIC_UNITS[keyof typeof PERFORMANCE_METRIC_UNITS];\n\n/**\n * 带单位的性能指标值\n */\nexport interface PerformanceMetricValue {\n /**\n * 指标值\n */\n value: number;\n /**\n * 单位\n */\n unit: PerformanceMetricUnit;\n}\n\n/**\n * 性能指标类型\n */\nexport interface PerformanceMetrics {\n /**\n * First Contentful Paint (首次内容绘制)\n * 单位:毫秒(ms)\n */\n fcp?: number;\n /**\n * Largest Contentful Paint (最大内容绘制)\n * 单位:毫秒(ms)\n */\n lcp?: number;\n /**\n * First Input Delay (首次输入延迟)\n * 单位:毫秒(ms)\n */\n fid?: number;\n /**\n * Cumulative Layout Shift (累积布局偏移)\n * 单位:无(分数)\n */\n cls?: number;\n /**\n * Time to Interactive (可交互时间)\n * 单位:毫秒(ms)\n */\n tti?: number;\n /**\n * Total Blocking Time (总阻塞时间)\n * 单位:毫秒(ms)\n */\n tbt?: number;\n /**\n * Speed Index (速度指数)\n * 单位:毫秒(ms)\n */\n si?: number;\n}\n\n/**\n * 性能监控配置\n */\nexport interface PerformanceMonitorConfig {\n /**\n * 是否自动收集 Web Vitals\n */\n collectWebVitals?: boolean;\n /**\n * 性能指标上报回调\n */\n onReport?: (metrics: PerformanceMetrics) => void;\n /**\n * 采样率 (0-1)\n */\n sampleRate?: number;\n /**\n * 是否启用性能指标聚合\n */\n enableAggregation?: boolean;\n /**\n * 性能指标聚合窗口大小(毫秒)\n */\n aggregationWindow?: number;\n /**\n * 是否自动上报性能指标\n */\n autoReport?: boolean;\n /**\n * 自动上报间隔(毫秒)\n */\n autoReportInterval?: number;\n}\n\n/**\n * 性能监控类\n */\nexport class PerformanceMonitor {\n private config: Required<PerformanceMonitorConfig>;\n private metrics: PerformanceMetrics = {};\n private observers: PerformanceObserver[] = [];\n private aggregatedMetrics: PerformanceMetrics = {};\n private aggregationTimer?: ReturnType<typeof setInterval>;\n private autoReportTimer?: ReturnType<typeof setInterval>;\n\n constructor(config: PerformanceMonitorConfig = {}) {\n this.config = {\n collectWebVitals: config.collectWebVitals ?? true,\n onReport: config.onReport ?? (() => {}),\n sampleRate: config.sampleRate ?? 1.0,\n enableAggregation: config.enableAggregation ?? false,\n aggregationWindow: config.aggregationWindow ?? 60000, // 1分钟\n autoReport: config.autoReport ?? false,\n autoReportInterval: config.autoReportInterval ?? 300000, // 5分钟\n };\n\n if (this.config.collectWebVitals && typeof window !== 'undefined') {\n this.initWebVitals();\n }\n\n // 启动性能指标聚合\n if (this.config.enableAggregation) {\n this.startAggregation();\n }\n\n // 启动自动上报\n if (this.config.autoReport) {\n this.startAutoReport();\n }\n }\n\n /**\n * 初始化 Web Vitals 收集\n */\n private initWebVitals(): void {\n // 采样检查移到每次上报时进行,而不是初始化时\n // 这样可以确保监控功能始终初始化,只是选择性上报\n\n // 首次内容绘制 (FCP)\n this.observePaint('first-contentful-paint', (entry) => {\n if (Math.random() <= this.config.sampleRate) {\n this.metrics.fcp = Math.round(entry.startTime);\n this.reportInternal();\n }\n });\n\n // 最大内容绘制 (LCP)\n this.observeLCP();\n\n // 首次输入延迟 (FID)\n this.observeFID();\n\n // 累积布局偏移 (CLS)\n this.observeCLS();\n\n // 可交互时间 (TTI) - 需要计算(延迟到页面加载完成后)\n if (typeof window !== 'undefined' && document.readyState === 'complete') {\n this.calculateTTI();\n } else if (typeof window !== 'undefined') {\n window.addEventListener('load', () => {\n // 使用 requestIdleCallback 在空闲时计算\n if (typeof requestIdleCallback !== 'undefined') {\n requestIdleCallback(() => {\n this.calculateTTI();\n }, { timeout: 2000 });\n } else {\n setTimeout(() => {\n this.calculateTTI();\n }, 1000);\n }\n });\n }\n }\n\n /**\n * 观察 Paint 指标\n */\n private observePaint(name: string, callback: (entry: PerformanceEntry) => void): void {\n if (typeof PerformanceObserver === 'undefined') {\n return;\n }\n\n try {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (entry.name === name) {\n callback(entry);\n observer.disconnect();\n }\n }\n });\n observer.observe({ entryTypes: ['paint'] });\n this.observers.push(observer);\n } catch (e) {\n // PerformanceObserver 不支持或已断开\n }\n }\n\n /**\n * 观察 LCP\n */\n private observeLCP(): void {\n if (typeof PerformanceObserver === 'undefined') {\n return;\n }\n\n try {\n const observer = new PerformanceObserver((list) => {\n const entries = list.getEntries();\n const lastEntry = entries[entries.length - 1] as PerformanceEntry & { renderTime?: number; loadTime?: number };\n const lcpValue = Math.round((lastEntry.renderTime || lastEntry.loadTime || lastEntry.startTime));\n \n // 采样检查和异常值检查\n if (Math.random() <= this.config.sampleRate && lcpValue > 0 && lcpValue < 60000) {\n this.metrics.lcp = lcpValue;\n this.reportInternal();\n }\n });\n observer.observe({ entryTypes: ['largest-contentful-paint'] });\n this.observers.push(observer);\n } catch (e) {\n // PerformanceObserver 不支持\n }\n }\n\n /**\n * 观察 FID\n */\n private observeFID(): void {\n if (typeof PerformanceObserver === 'undefined') {\n return;\n }\n\n try {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n const fidEntry = entry as PerformanceEventTiming;\n const fidValue = Math.round(fidEntry.processingStart - fidEntry.startTime);\n \n // 采样检查和异常值检查\n if (Math.random() <= this.config.sampleRate && fidValue >= 0 && fidValue < 10000) {\n this.metrics.fid = fidValue;\n this.reportInternal();\n }\n observer.disconnect();\n }\n });\n observer.observe({ entryTypes: ['first-input'] });\n this.observers.push(observer);\n } catch (e) {\n // PerformanceObserver 不支持\n }\n }\n\n /**\n * 观察 CLS\n */\n private observeCLS(): void {\n if (typeof PerformanceObserver === 'undefined') {\n return;\n }\n\n let clsValue = 0;\n let clsEntries: PerformanceEntry[] = [];\n\n try {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (!(entry as any).hadRecentInput) {\n const firstSessionEntry = clsEntries[0];\n const lastSessionEntry = clsEntries[clsEntries.length - 1];\n\n if (\n !firstSessionEntry ||\n entry.startTime - lastSessionEntry.startTime < 1000 ||\n entry.startTime - firstSessionEntry.startTime > 5000\n ) {\n clsEntries = [entry];\n clsValue = (entry as any).value;\n } else {\n clsEntries.push(entry);\n clsValue += (entry as any).value;\n }\n\n const roundedValue = Math.round(clsValue * 1000) / 1000;\n // 采样检查和异常值检查\n if (Math.random() <= this.config.sampleRate && roundedValue >= 0 && roundedValue < 1) {\n this.metrics.cls = roundedValue;\n this.reportInternal();\n }\n }\n }\n });\n observer.observe({ entryTypes: ['layout-shift'] });\n this.observers.push(observer);\n } catch (e) {\n // PerformanceObserver 不支持\n }\n }\n\n /**\n * 计算 TTI\n */\n private calculateTTI(): void {\n if (typeof window === 'undefined' || !window.performance) {\n return;\n }\n\n try {\n const navigation = performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming;\n if (navigation) {\n const ttiValue = Math.round(navigation.domInteractive - navigation.fetchStart);\n // 采样检查和异常值检查\n if (Math.random() <= this.config.sampleRate && ttiValue > 0 && ttiValue < 60000) {\n this.metrics.tti = ttiValue;\n this.reportInternal();\n }\n }\n } catch (e) {\n // 忽略错误\n }\n }\n\n /**\n * 内部上报性能指标(自动上报当前指标)\n */\n private reportInternal(): void {\n if (this.config.onReport) {\n // 创建指标的副本,避免外部修改影响内部状态\n const metricsCopy: PerformanceMetrics = {};\n if (this.metrics.fcp !== undefined) metricsCopy.fcp = this.metrics.fcp;\n if (this.metrics.lcp !== undefined) metricsCopy.lcp = this.metrics.lcp;\n if (this.metrics.fid !== undefined) metricsCopy.fid = this.metrics.fid;\n if (this.metrics.cls !== undefined) metricsCopy.cls = this.metrics.cls;\n if (this.metrics.tti !== undefined) metricsCopy.tti = this.metrics.tti;\n if (this.metrics.tbt !== undefined) metricsCopy.tbt = this.metrics.tbt;\n if (this.metrics.si !== undefined) metricsCopy.si = this.metrics.si;\n \n this.config.onReport(metricsCopy);\n }\n }\n\n /**\n * 获取当前性能指标\n */\n getMetrics(): PerformanceMetrics {\n return { ...this.metrics };\n }\n\n /**\n * 手动记录自定义指标\n */\n recordMetric(name: string, value: number): void {\n (this.metrics as Record<string, number>)[name] = value;\n this.reportInternal();\n }\n\n /**\n * 清理观察者\n */\n disconnect(): void {\n this.observers.forEach((observer) => observer.disconnect());\n this.observers = [];\n\n // 停止聚合定时器\n if (this.aggregationTimer) {\n clearInterval(this.aggregationTimer);\n this.aggregationTimer = undefined;\n }\n\n // 停止自动上报定时器\n if (this.autoReportTimer) {\n clearInterval(this.autoReportTimer);\n this.autoReportTimer = undefined;\n }\n }\n\n /**\n * 启动性能指标聚合\n */\n private startAggregation(): void {\n this.aggregationTimer = setInterval(() => {\n this.aggregateMetrics();\n }, this.config.aggregationWindow);\n }\n\n /**\n * 聚合性能指标\n */\n private aggregateMetrics(): void {\n // 计算平均值、最大值、最小值等统计信息\n // 这里简化实现,实际可以根据需要扩展\n this.aggregatedMetrics = { ...this.metrics };\n }\n\n /**\n * 获取聚合后的性能指标\n */\n getAggregatedMetrics(): PerformanceMetrics {\n return { ...this.aggregatedMetrics };\n }\n\n /**\n * 启动自动上报\n */\n private startAutoReport(): void {\n this.autoReportTimer = setInterval(() => {\n const metrics = this.config.enableAggregation \n ? this.getAggregatedMetrics() \n : this.getMetrics();\n this.config.onReport(metrics);\n }, this.config.autoReportInterval);\n }\n\n /**\n * 手动上报性能指标\n */\n report(metrics?: PerformanceMetrics): void {\n const metricsToReport = metrics || this.getMetrics();\n this.config.onReport(metricsToReport);\n }\n}\n\n/**\n * 带单位的性能指标类型\n */\nexport interface PerformanceMetricsWithUnits {\n /**\n * First Contentful Paint (首次内容绘制)\n * 单位:毫秒(ms)\n */\n fcp?: PerformanceMetricValue;\n /**\n * Largest Contentful Paint (最大内容绘制)\n * 单位:毫秒(ms)\n */\n lcp?: PerformanceMetricValue;\n /**\n * First Input Delay (首次输入延迟)\n * 单位:毫秒(ms)\n */\n fid?: PerformanceMetricValue;\n /**\n * Cumulative Layout Shift (累积布局偏移)\n * 单位:无(分数)\n */\n cls?: PerformanceMetricValue;\n /**\n * Time to Interactive (可交互时间)\n * 单位:毫秒(ms)\n */\n tti?: PerformanceMetricValue;\n /**\n * Total Blocking Time (总阻塞时间)\n * 单位:毫秒(ms)\n */\n tbt?: PerformanceMetricValue;\n /**\n * Speed Index (速度指数)\n * 单位:毫秒(ms)\n */\n si?: PerformanceMetricValue;\n /**\n * 服务初始化耗时\n * 单位:毫秒(ms)\n */\n serviceInitDuration?: PerformanceMetricValue;\n /**\n * 初始化耗时\n * 单位:毫秒(ms)\n */\n initializationDuration?: PerformanceMetricValue;\n /**\n * 首次渲染耗时\n * 单位:毫秒(ms)\n */\n firstRenderDuration?: PerformanceMetricValue;\n /**\n * 总启动耗时\n * 单位:毫秒(ms)\n */\n totalStartupDuration?: PerformanceMetricValue;\n}\n\n/**\n * 性能指标单位映射(包含所有可能的指标键)\n */\nexport const PERFORMANCE_METRIC_UNIT_MAP: Record<string, PerformanceMetricUnit> = {\n // Web Vitals 指标\n fcp: PERFORMANCE_METRIC_UNITS.ms,\n lcp: PERFORMANCE_METRIC_UNITS.ms,\n fid: PERFORMANCE_METRIC_UNITS.ms,\n cls: PERFORMANCE_METRIC_UNITS.none,\n tti: PERFORMANCE_METRIC_UNITS.ms,\n tbt: PERFORMANCE_METRIC_UNITS.ms,\n si: PERFORMANCE_METRIC_UNITS.ms,\n // 启动性能指标\n serviceInitDuration: PERFORMANCE_METRIC_UNITS.ms,\n initializationDuration: PERFORMANCE_METRIC_UNITS.ms,\n firstRenderDuration: PERFORMANCE_METRIC_UNITS.ms,\n totalStartupDuration: PERFORMANCE_METRIC_UNITS.ms,\n};\n\n/**\n * 将性能指标转换为带单位的格式\n * \n * @param metrics - 性能指标对象(可能包含 Web Vitals 和启动性能指标)\n * @returns 带单位的性能指标对象\n */\nexport function convertMetricsToWithUnits(metrics: PerformanceMetrics | Record<string, number>): PerformanceMetricsWithUnits {\n const result: PerformanceMetricsWithUnits = {};\n \n for (const [key, value] of Object.entries(metrics)) {\n if (value !== undefined && value !== null && typeof value === 'number') {\n // 从映射中获取单位,如果没有映射则默认为毫秒\n const unit = PERFORMANCE_METRIC_UNIT_MAP[key] || PERFORMANCE_METRIC_UNITS.ms;\n (result as Record<string, PerformanceMetricValue>)[key] = {\n value,\n unit,\n };\n }\n }\n \n return result;\n}\n\n/**\n * 性能事件时间接口\n */\ninterface PerformanceEventTiming extends PerformanceEntry {\n processingStart: number;\n}\n"],"names":["PERFORMANCE_METRIC_UNITS","ms","none","PerformanceMonitor","initWebVitals","observePaint","entry","Math","random","config","sampleRate","metrics","fcp","round","startTime","reportInternal","observeLCP","observeFID","observeCLS","window","document","readyState","calculateTTI","addEventListener","requestIdleCallback","timeout","setTimeout","name","callback","PerformanceObserver","observer","list","getEntries","disconnect","observe","entryTypes","observers","push","e","entries","lastEntry","length","lcpValue","renderTime","loadTime","lcp","fidEntry","fidValue","processingStart","fid","clsValue","clsEntries","hadRecentInput","firstSessionEntry","lastSessionEntry","value","roundedValue","cls","performance","navigation","getEntriesByType","ttiValue","domInteractive","fetchStart","tti","onReport","metricsCopy","undefined","tbt","si","getMetrics","recordMetric","forEach","aggregationTimer","clearInterval","autoReportTimer","startAggregation","setInterval","aggregateMetrics","aggregationWindow","aggregatedMetrics","getAggregatedMetrics","startAutoReport","enableAggregation","autoReportInterval","report","metricsToReport","collectWebVitals","autoReport","PERFORMANCE_METRIC_UNIT_MAP","serviceInitDuration","initializationDuration","firstRenderDuration","totalStartupDuration","convertMetricsToWithUnits","result","key","Object","unit"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utils/performance.ts"],"sourcesContent":["export { PerformanceMonitor, PERFORMANCE_METRIC_UNITS, convertMetricsToWithUnits } from '@vlian/utils';\nexport type {\n PerformanceMetrics,\n PerformanceMonitorConfig,\n PerformanceMetricsWithUnits,\n PerformanceMetricValue,\n PerformanceMetricUnit,\n} from '@vlian/utils';\n"],"names":["PerformanceMonitor","PERFORMANCE_METRIC_UNITS","convertMetricsToWithUnits"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,wBAAwB,EAAEC,yBAAyB,QAAQ,eAAe"}