@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.
Files changed (154) hide show
  1. package/dist/analytics/index.cjs +1 -22
  2. package/dist/analytics.umd.js +1 -1
  3. package/dist/components/LocaleSwitch.cjs +1 -116
  4. package/dist/components/ThemeSwitch.cjs +1 -115
  5. package/dist/components/index.cjs +1 -20
  6. package/dist/components/persistence.cjs +1 -58
  7. package/dist/core/Test.cjs +1 -64
  8. package/dist/core/app/AppContext.cjs +1 -348
  9. package/dist/core/app/AppContext.types.cjs +1 -4
  10. package/dist/core/app/BasicLayout.cjs +1 -122
  11. package/dist/core/app/DefaultApp.cjs +1 -150
  12. package/dist/core/app/index.cjs +1 -41
  13. package/dist/core/config/AppConfig.cjs +1 -139
  14. package/dist/core/config/ConfigLoader.cjs +1 -323
  15. package/dist/core/config/ConfigValidator.cjs +2 -133
  16. package/dist/core/config/index.cjs +1 -28
  17. package/dist/core/dev/DevTools.cjs +1 -226
  18. package/dist/core/error/ErrorBoundary.cjs +1 -401
  19. package/dist/core/error/ErrorHandler.cjs +1 -275
  20. package/dist/core/error/index.cjs +1 -34
  21. package/dist/core/event/AppEventBus.cjs +1 -444
  22. package/dist/core/event/frameworkEvents.cjs +1 -141
  23. package/dist/core/event/hooks.cjs +1 -69
  24. package/dist/core/event/index.cjs +1 -41
  25. package/dist/core/event/types.cjs +1 -62
  26. package/dist/core/event/useEventBus.cjs +1 -25
  27. package/dist/core/index.cjs +1 -140
  28. package/dist/core/initialization/InitializationErrorThrower.cjs +1 -75
  29. package/dist/core/initialization/index.cjs +1 -26
  30. package/dist/core/initialization/initialization.cjs +1 -64
  31. package/dist/core/initialization/initializationErrorState.cjs +1 -66
  32. package/dist/core/kernel/defaultAdapters.cjs +1 -184
  33. package/dist/core/kernel/errors.cjs +1 -69
  34. package/dist/core/kernel/index.cjs +1 -20
  35. package/dist/core/kernel/startKernel.cjs +1 -200
  36. package/dist/core/kernel/types.cjs +1 -4
  37. package/dist/core/middleware.cjs +1 -73
  38. package/dist/core/plugin/PluginEventBus.cjs +1 -298
  39. package/dist/core/plugin/PluginSandbox.cjs +1 -137
  40. package/dist/core/plugin.cjs +1 -494
  41. package/dist/core/router/RouterManager.cjs +1 -286
  42. package/dist/core/router/adapter/AdapterManager.cjs +1 -235
  43. package/dist/core/router/adapter/index.cjs +1 -22
  44. package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs +1 -128
  45. package/dist/core/router/adapter/react-router/index.cjs +1 -20
  46. package/dist/core/router/adapter/types.cjs +1 -6
  47. package/dist/core/router/dev/RouterDevTools.cjs +1 -260
  48. package/dist/core/router/dev/index.cjs +1 -20
  49. package/dist/core/router/dynamic/DynamicRouteManager.cjs +1 -193
  50. package/dist/core/router/dynamic/index.cjs +1 -20
  51. package/dist/core/router/errors/RouterError.cjs +1 -61
  52. package/dist/core/router/errors/index.cjs +1 -20
  53. package/dist/core/router/index.cjs +1 -36
  54. package/dist/core/router/lifecycle/RouterLifecycleManager.cjs +1 -144
  55. package/dist/core/router/lifecycle/index.cjs +1 -20
  56. package/dist/core/router/middleware/RouterMiddlewareManager.cjs +1 -193
  57. package/dist/core/router/middleware/auth.cjs +1 -66
  58. package/dist/core/router/middleware/index.cjs +1 -22
  59. package/dist/core/router/middleware/types.cjs +1 -6
  60. package/dist/core/router/monitoring/RouterMonitoring.cjs +1 -227
  61. package/dist/core/router/monitoring/index.cjs +1 -20
  62. package/dist/core/router/navigation/RouterNavigation.cjs +1 -239
  63. package/dist/core/router/navigation/index.cjs +1 -20
  64. package/dist/core/router/performance/RouteCache.cjs +1 -305
  65. package/dist/core/router/performance/RoutePreloader.cjs +1 -292
  66. package/dist/core/router/performance/index.cjs +1 -21
  67. package/dist/core/router/plugin/RouterPluginManager.cjs +1 -262
  68. package/dist/core/router/plugin/index.cjs +1 -21
  69. package/dist/core/router/plugin/types.cjs +1 -39
  70. package/dist/core/router/types.cjs +1 -4
  71. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +1 -129
  72. package/dist/core/router/utils/adapters/react-router/transform.cjs +1 -250
  73. package/dist/core/router/utils/transform.cjs +1 -780
  74. package/dist/core/router/validation/RouterConfigValidator.cjs +2 -83
  75. package/dist/core/router/validation/index.cjs +1 -21
  76. package/dist/core/router/validation/schema.cjs +1 -159
  77. package/dist/core/router/version/RouteVersionManager.cjs +1 -205
  78. package/dist/core/router/version/index.cjs +1 -20
  79. package/dist/core/splash/SplashScreen.cjs +1 -341
  80. package/dist/core/splash/index.cjs +1 -22
  81. package/dist/core/splash/splashScreenUtils.cjs +1 -38
  82. package/dist/core/startup/AppInstance.cjs +1 -239
  83. package/dist/core/startup/environment.cjs +1 -169
  84. package/dist/core/startup/index.cjs +1 -23
  85. package/dist/core/startup/initializeServices.cjs +1 -226
  86. package/dist/core/startup/performanceTracker.cjs +1 -179
  87. package/dist/core/startup/renderApp.cjs +1 -314
  88. package/dist/core/startup/startApp.cjs +1 -317
  89. package/dist/core/types.cjs +1 -4
  90. package/dist/index.cjs +1 -52
  91. package/dist/index.umd.cjs +1 -27
  92. package/dist/index.umd.js +1 -1
  93. package/dist/kernel/constants.cjs +1 -65
  94. package/dist/kernel/index.cjs +1 -38
  95. package/dist/kernel/kernel.cjs +1 -295
  96. package/dist/kernel/manager/cacheManager.cjs +1 -46
  97. package/dist/kernel/manager/i18n/I18nManager.cjs +1 -91
  98. package/dist/kernel/manager/i18n/i18n.persistence.cjs +1 -60
  99. package/dist/kernel/manager/i18n/i18n.schema.cjs +1 -86
  100. package/dist/kernel/manager/i18n/index.cjs +1 -11
  101. package/dist/kernel/manager/i18nManager.cjs +1 -11
  102. package/dist/kernel/manager/index.cjs +1 -28
  103. package/dist/kernel/manager/logger/LoggerManager.cjs +1 -107
  104. package/dist/kernel/manager/logger/index.cjs +1 -11
  105. package/dist/kernel/manager/logger/logger.persistence.cjs +1 -62
  106. package/dist/kernel/manager/logger/logger.schema.cjs +1 -74
  107. package/dist/kernel/manager/loggerManager.cjs +1 -11
  108. package/dist/kernel/manager/theme/ThemeManager.cjs +1 -84
  109. package/dist/kernel/manager/theme/index.cjs +1 -11
  110. package/dist/kernel/manager/theme/theme.dom.cjs +1 -61
  111. package/dist/kernel/manager/theme/theme.persistence.cjs +1 -57
  112. package/dist/kernel/manager/theme/theme.schema.cjs +1 -122
  113. package/dist/kernel/manager/themeManager.cjs +1 -11
  114. package/dist/kernel/types.cjs +1 -4
  115. package/dist/library/index.cjs +1 -19
  116. package/dist/library/locale/index.cjs +1 -39
  117. package/dist/library/locale/langs/en-us/index.cjs +1 -32
  118. package/dist/library/locale/langs/zh-cn/index.cjs +1 -32
  119. package/dist/library/locale/types.cjs +1 -4
  120. package/dist/library/storage/cache.cjs +1 -243
  121. package/dist/library/storage/encryption.cjs +1 -147
  122. package/dist/library/storage/index.cjs +1 -124
  123. package/dist/state/StateManager.cjs +1 -166
  124. package/dist/state/adapters/AdapterFactory.cjs +1 -89
  125. package/dist/state/adapters/DefaultAdapter.cjs +1 -75
  126. package/dist/state/adapters/ReduxAdapter.cjs +1 -443
  127. package/dist/state/adapters/ZustandAdapter.cjs +1 -69
  128. package/dist/state/adapters/index.cjs +1 -44
  129. package/dist/state/adapters/types.cjs +1 -20
  130. package/dist/state/core/DerivedStateInstance.cjs +1 -174
  131. package/dist/state/core/StateInstance.cjs +1 -170
  132. package/dist/state/core/StateRegistry.cjs +1 -110
  133. package/dist/state/core/StateScope.cjs +1 -137
  134. package/dist/state/core/index.cjs +1 -30
  135. package/dist/state/index.cjs +1 -30
  136. package/dist/state/types.cjs +1 -12
  137. package/dist/state.umd.js +1 -1
  138. package/dist/types.cjs +1 -4
  139. package/dist/utils/analytics.cjs +1 -217
  140. package/dist/utils/configSecurity.cjs +3 -182
  141. package/dist/utils/csrf.cjs +1 -18
  142. package/dist/utils/errors/ErrorCodes.cjs +1 -25
  143. package/dist/utils/errors.cjs +1 -111
  144. package/dist/utils/index.cjs +1 -135
  145. package/dist/utils/logger.cjs +1 -25
  146. package/dist/utils/logger.types.cjs +1 -11
  147. package/dist/utils/monitoring.cjs +1 -18
  148. package/dist/utils/performance.cjs +1 -22
  149. package/dist/utils/resourceLoader.cjs +1 -22
  150. package/dist/utils/runtimeSecurity.cjs +1 -11
  151. package/dist/utils/security.cjs +1 -19
  152. package/dist/utils/traceId.cjs +1 -37
  153. package/dist/utils/validation.cjs +1 -19
  154. package/package.json +12 -3
@@ -1,227 +1 @@
1
- /**
2
- * 路由监控服务
3
- * 提供路由访问统计、性能监控、错误监控等功能
4
- */ "use strict";
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- function _export(target, all) {
9
- for(var name in all)Object.defineProperty(target, name, {
10
- enumerable: true,
11
- get: Object.getOwnPropertyDescriptor(all, name).get
12
- });
13
- }
14
- _export(exports, {
15
- get RouterMonitoring () {
16
- return RouterMonitoring;
17
- },
18
- get getRouterMonitoring () {
19
- return getRouterMonitoring;
20
- }
21
- });
22
- const _monitoring = require("@vlian/monitoring");
23
- const _logger = require("@vlian/logger");
24
- function _define_property(obj, key, value) {
25
- if (key in obj) {
26
- Object.defineProperty(obj, key, {
27
- value: value,
28
- enumerable: true,
29
- configurable: true,
30
- writable: true
31
- });
32
- } else {
33
- obj[key] = value;
34
- }
35
- return obj;
36
- }
37
- let RouterMonitoring = class RouterMonitoring {
38
- /**
39
- * 记录路由访问
40
- */ trackRouteAccess(to, from, success = true, error) {
41
- if (!this.config.enabled || !this.config.trackAccess) {
42
- return;
43
- }
44
- // 采样检查
45
- if (Math.random() > this.config.sampleRate) {
46
- return;
47
- }
48
- const record = {
49
- path: to.path,
50
- name: to.meta?.name,
51
- timestamp: Date.now(),
52
- from: from?.path,
53
- success,
54
- error: error?.message
55
- };
56
- // 如果有当前路由,计算持续时间
57
- if (this.currentRoute && this.currentRouteStartTime > 0) {
58
- record.duration = Date.now() - this.currentRouteStartTime;
59
- }
60
- this.accessRecords.push(record);
61
- // 限制记录数量
62
- if (this.accessRecords.length > this.config.maxRecords) {
63
- this.accessRecords.shift();
64
- }
65
- // 上报到监控服务
66
- this.monitoringService.trackEvent('route_access', {
67
- path: to.path,
68
- name: to.meta?.name,
69
- success,
70
- error: error?.message
71
- });
72
- // 更新当前路由
73
- this.currentRoute = to;
74
- this.currentRouteStartTime = Date.now();
75
- _logger.logger.debug('路由访问已记录', record);
76
- }
77
- /**
78
- * 记录路由性能指标
79
- */ trackRoutePerformance(routeName, metrics) {
80
- if (!this.config.enabled || !this.config.trackPerformance) {
81
- return;
82
- }
83
- // 采样检查
84
- if (Math.random() > this.config.sampleRate) {
85
- return;
86
- }
87
- const routeMetrics = this.performanceMetrics.get(routeName) || [];
88
- routeMetrics.push(metrics);
89
- // 限制记录数量
90
- if (routeMetrics.length > 100) {
91
- routeMetrics.shift();
92
- }
93
- this.performanceMetrics.set(routeName, routeMetrics);
94
- // 上报到监控服务
95
- this.monitoringService.reportPerformance({
96
- [`route_${routeName}_match`]: metrics.matchTime || 0,
97
- [`route_${routeName}_load`]: metrics.loadTime || 0,
98
- [`route_${routeName}_render`]: metrics.renderTime || 0,
99
- [`route_${routeName}_total`]: metrics.totalTime || 0
100
- });
101
- _logger.logger.debug(`路由性能指标已记录: ${routeName}`, metrics);
102
- }
103
- /**
104
- * 记录路由错误
105
- */ trackRouteError(error, context) {
106
- if (!this.config.enabled || !this.config.trackErrors) {
107
- return;
108
- }
109
- // 采样检查
110
- if (Math.random() > this.config.sampleRate) {
111
- return;
112
- }
113
- // 上报到监控服务
114
- this.monitoringService.captureError(error, {
115
- type: 'router',
116
- ...context
117
- });
118
- _logger.logger.error('路由错误已记录', error, context);
119
- }
120
- /**
121
- * 获取路由访问统计
122
- */ getAccessStats() {
123
- const stats = {
124
- total: this.accessRecords.length,
125
- success: 0,
126
- failed: 0,
127
- byPath: {},
128
- byName: {},
129
- averageDuration: 0
130
- };
131
- let totalDuration = 0;
132
- let durationCount = 0;
133
- for (const record of this.accessRecords){
134
- if (record.success) {
135
- stats.success++;
136
- } else {
137
- stats.failed++;
138
- }
139
- stats.byPath[record.path] = (stats.byPath[record.path] || 0) + 1;
140
- if (record.name) {
141
- stats.byName[record.name] = (stats.byName[record.name] || 0) + 1;
142
- }
143
- if (record.duration) {
144
- totalDuration += record.duration;
145
- durationCount++;
146
- }
147
- }
148
- stats.averageDuration = durationCount > 0 ? totalDuration / durationCount : 0;
149
- return stats;
150
- }
151
- /**
152
- * 获取路由性能统计
153
- */ getPerformanceStats() {
154
- const stats = {};
155
- for (const [routeName, metrics] of this.performanceMetrics.entries()){
156
- let totalMatchTime = 0;
157
- let totalLoadTime = 0;
158
- let totalRenderTime = 0;
159
- let totalTotalTime = 0;
160
- let count = 0;
161
- for (const metric of metrics){
162
- if (metric.matchTime) {
163
- totalMatchTime += metric.matchTime;
164
- }
165
- if (metric.loadTime) {
166
- totalLoadTime += metric.loadTime;
167
- }
168
- if (metric.renderTime) {
169
- totalRenderTime += metric.renderTime;
170
- }
171
- if (metric.totalTime) {
172
- totalTotalTime += metric.totalTime;
173
- }
174
- count++;
175
- }
176
- stats[routeName] = {
177
- count,
178
- averageMatchTime: count > 0 ? totalMatchTime / count : 0,
179
- averageLoadTime: count > 0 ? totalLoadTime / count : 0,
180
- averageRenderTime: count > 0 ? totalRenderTime / count : 0,
181
- averageTotalTime: count > 0 ? totalTotalTime / count : 0
182
- };
183
- }
184
- return stats;
185
- }
186
- /**
187
- * 清空所有记录
188
- */ clear() {
189
- this.accessRecords = [];
190
- this.performanceMetrics.clear();
191
- _logger.logger.debug('路由监控记录已清空');
192
- }
193
- /**
194
- * 获取监控报告
195
- */ getReport() {
196
- return {
197
- access: this.getAccessStats(),
198
- performance: this.getPerformanceStats(),
199
- timestamp: Date.now()
200
- };
201
- }
202
- constructor(config = {}){
203
- _define_property(this, "accessRecords", []);
204
- _define_property(this, "performanceMetrics", new Map());
205
- _define_property(this, "config", void 0);
206
- _define_property(this, "monitoringService", (0, _monitoring.getMonitoring)());
207
- _define_property(this, "currentRouteStartTime", 0);
208
- _define_property(this, "currentRoute", void 0);
209
- this.config = {
210
- enabled: config.enabled ?? true,
211
- trackAccess: config.trackAccess ?? true,
212
- trackPerformance: config.trackPerformance ?? true,
213
- trackErrors: config.trackErrors ?? true,
214
- maxRecords: config.maxRecords ?? 1000,
215
- sampleRate: config.sampleRate ?? 1.0
216
- };
217
- }
218
- };
219
- /**
220
- * 获取路由监控服务单例
221
- */ let routerMonitoringInstance = null;
222
- function getRouterMonitoring(config) {
223
- if (!routerMonitoringInstance) {
224
- routerMonitoringInstance = new RouterMonitoring(config);
225
- }
226
- return routerMonitoringInstance;
227
- }
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 RouterMonitoring(){return RouterMonitoring},get getRouterMonitoring(){return getRouterMonitoring}});const _monitoring=require("@vlian/monitoring");const _logger=require("@vlian/logger");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}let RouterMonitoring=class RouterMonitoring{trackRouteAccess(to,from,success=true,error){if(!this.config.enabled||!this.config.trackAccess){return}if(Math.random()>this.config.sampleRate){return}const record={path:to.path,name:to.meta?.name,timestamp:Date.now(),from:from?.path,success,error:error?.message};if(this.currentRoute&&this.currentRouteStartTime>0){record.duration=Date.now()-this.currentRouteStartTime}this.accessRecords.push(record);if(this.accessRecords.length>this.config.maxRecords){this.accessRecords.shift()}this.monitoringService.trackEvent("route_access",{path:to.path,name:to.meta?.name,success,error:error?.message});this.currentRoute=to;this.currentRouteStartTime=Date.now();_logger.logger.debug("路由访问已记录",record)}trackRoutePerformance(routeName,metrics){if(!this.config.enabled||!this.config.trackPerformance){return}if(Math.random()>this.config.sampleRate){return}const routeMetrics=this.performanceMetrics.get(routeName)||[];routeMetrics.push(metrics);if(routeMetrics.length>100){routeMetrics.shift()}this.performanceMetrics.set(routeName,routeMetrics);this.monitoringService.reportPerformance({[`route_${routeName}_match`]:metrics.matchTime||0,[`route_${routeName}_load`]:metrics.loadTime||0,[`route_${routeName}_render`]:metrics.renderTime||0,[`route_${routeName}_total`]:metrics.totalTime||0});_logger.logger.debug(`路由性能指标已记录: ${routeName}`,metrics)}trackRouteError(error,context){if(!this.config.enabled||!this.config.trackErrors){return}if(Math.random()>this.config.sampleRate){return}this.monitoringService.captureError(error,{type:"router",...context});_logger.logger.error("路由错误已记录",error,context)}getAccessStats(){const stats={total:this.accessRecords.length,success:0,failed:0,byPath:{},byName:{},averageDuration:0};let totalDuration=0;let durationCount=0;for(const record of this.accessRecords){if(record.success){stats.success++}else{stats.failed++}stats.byPath[record.path]=(stats.byPath[record.path]||0)+1;if(record.name){stats.byName[record.name]=(stats.byName[record.name]||0)+1}if(record.duration){totalDuration+=record.duration;durationCount++}}stats.averageDuration=durationCount>0?totalDuration/durationCount:0;return stats}getPerformanceStats(){const stats={};for(const[routeName,metrics]of this.performanceMetrics.entries()){let totalMatchTime=0;let totalLoadTime=0;let totalRenderTime=0;let totalTotalTime=0;let count=0;for(const metric of metrics){if(metric.matchTime){totalMatchTime+=metric.matchTime}if(metric.loadTime){totalLoadTime+=metric.loadTime}if(metric.renderTime){totalRenderTime+=metric.renderTime}if(metric.totalTime){totalTotalTime+=metric.totalTime}count++}stats[routeName]={count,averageMatchTime:count>0?totalMatchTime/count:0,averageLoadTime:count>0?totalLoadTime/count:0,averageRenderTime:count>0?totalRenderTime/count:0,averageTotalTime:count>0?totalTotalTime/count:0}}return stats}clear(){this.accessRecords=[];this.performanceMetrics.clear();_logger.logger.debug("路由监控记录已清空")}getReport(){return{access:this.getAccessStats(),performance:this.getPerformanceStats(),timestamp:Date.now()}}constructor(config={}){_define_property(this,"accessRecords",[]);_define_property(this,"performanceMetrics",new Map);_define_property(this,"config",void 0);_define_property(this,"monitoringService",(0,_monitoring.getMonitoring)());_define_property(this,"currentRouteStartTime",0);_define_property(this,"currentRoute",void 0);this.config={enabled:config.enabled??true,trackAccess:config.trackAccess??true,trackPerformance:config.trackPerformance??true,trackErrors:config.trackErrors??true,maxRecords:config.maxRecords??1e3,sampleRate:config.sampleRate??1}}};let routerMonitoringInstance=null;function getRouterMonitoring(config){if(!routerMonitoringInstance){routerMonitoringInstance=new RouterMonitoring(config)}return routerMonitoringInstance}
@@ -1,20 +1 @@
1
- /**
2
- * 路由监控模块入口
3
- */ "use strict";
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- _export_star(require("./RouterMonitoring"), exports);
8
- function _export_star(from, to) {
9
- Object.keys(from).forEach(function(k) {
10
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
11
- Object.defineProperty(to, k, {
12
- enumerable: true,
13
- get: function() {
14
- return from[k];
15
- }
16
- });
17
- }
18
- });
19
- return from;
20
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});_export_star(require("./RouterMonitoring"),exports);function _export_star(from,to){Object.keys(from).forEach(function(k){if(k!=="default"&&!Object.prototype.hasOwnProperty.call(to,k)){Object.defineProperty(to,k,{enumerable:true,get:function(){return from[k]}})}});return from}
@@ -1,239 +1 @@
1
- /**
2
- * 路由导航 API
3
- * 提供框架级别的路由导航能力,封装 react-router-dom 的导航功能
4
- */ "use strict";
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- Object.defineProperty(exports, "RouterNavigation", {
9
- enumerable: true,
10
- get: function() {
11
- return RouterNavigation;
12
- }
13
- });
14
- const _logger = require("@vlian/logger");
15
- const _lifecycle = require("../lifecycle");
16
- const _middleware = require("../middleware");
17
- function _define_property(obj, key, value) {
18
- if (key in obj) {
19
- Object.defineProperty(obj, key, {
20
- value: value,
21
- enumerable: true,
22
- configurable: true,
23
- writable: true
24
- });
25
- } else {
26
- obj[key] = value;
27
- }
28
- return obj;
29
- }
30
- function _getRequireWildcardCache(nodeInterop) {
31
- if (typeof WeakMap !== "function") return null;
32
- var cacheBabelInterop = new WeakMap();
33
- var cacheNodeInterop = new WeakMap();
34
- return (_getRequireWildcardCache = function(nodeInterop) {
35
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
36
- })(nodeInterop);
37
- }
38
- function _interop_require_wildcard(obj, nodeInterop) {
39
- if (!nodeInterop && obj && obj.__esModule) {
40
- return obj;
41
- }
42
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
43
- return {
44
- default: obj
45
- };
46
- }
47
- var cache = _getRequireWildcardCache(nodeInterop);
48
- if (cache && cache.has(obj)) {
49
- return cache.get(obj);
50
- }
51
- var newObj = {
52
- __proto__: null
53
- };
54
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
55
- for(var key in obj){
56
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
57
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
58
- if (desc && (desc.get || desc.set)) {
59
- Object.defineProperty(newObj, key, desc);
60
- } else {
61
- newObj[key] = obj[key];
62
- }
63
- }
64
- }
65
- newObj.default = obj;
66
- if (cache) {
67
- cache.set(obj, newObj);
68
- }
69
- return newObj;
70
- }
71
- let RouterNavigation = class RouterNavigation {
72
- static buildTargetPath(to, query) {
73
- const base = typeof window !== 'undefined' && window.location?.origin ? window.location.origin : 'http://localhost';
74
- const url = new URL(to, base);
75
- if (query && Object.keys(query).length > 0) {
76
- const params = new URLSearchParams(url.search);
77
- Object.entries(query).forEach(([key, value])=>{
78
- if (value === undefined || value === null) {
79
- params.delete(key);
80
- return;
81
- }
82
- params.set(key, String(value));
83
- });
84
- url.search = params.toString();
85
- }
86
- return `${url.pathname}${url.search}${url.hash}`;
87
- }
88
- static async navigateInternal(to, options, depth, visited) {
89
- const startTime = performance.now();
90
- if (depth > this.MAX_REDIRECTS) {
91
- throw new Error(`路由重定向次数超过上限(${this.MAX_REDIRECTS}),可能存在循环重定向`);
92
- }
93
- const targetPath = this.buildTargetPath(to, options?.query);
94
- if (visited.has(targetPath)) {
95
- throw new Error(`检测到循环重定向: ${targetPath}`);
96
- }
97
- visited.add(targetPath);
98
- const routerManager = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../RouterManager"))).then((m)=>m.getRouterManager());
99
- const router = routerManager.getRouter();
100
- if (!router) {
101
- throw new Error('路由未初始化,无法导航');
102
- }
103
- // 获取当前路由信息
104
- const currentLocation = this.getCurrentRoute();
105
- // 构建目标路由位置
106
- const targetLocation = {
107
- path: targetPath,
108
- query: options?.query
109
- };
110
- // 执行生命周期钩子
111
- const lifecycleManager = (0, _lifecycle.getRouterLifecycleManager)();
112
- const beforeEachResult = await lifecycleManager.beforeEach(targetLocation, currentLocation);
113
- let finalPath = targetPath;
114
- // 如果 beforeEach 返回 false,阻止导航
115
- if (beforeEachResult === false) {
116
- _logger.logger.debug('路由导航被阻止: beforeEach 返回 false');
117
- return;
118
- }
119
- // 如果 beforeEach 返回字符串,重定向到该路径
120
- if (typeof beforeEachResult === 'string') {
121
- _logger.logger.debug(`路由导航重定向: ${beforeEachResult}`);
122
- finalPath = this.buildTargetPath(beforeEachResult);
123
- }
124
- // 执行中间件
125
- const middlewareManager = (0, _middleware.getRouterMiddlewareManager)();
126
- const middlewareContext = {
127
- to: {
128
- ...targetLocation,
129
- path: finalPath
130
- },
131
- from: currentLocation,
132
- options
133
- };
134
- const middlewareResult = await middlewareManager.execute(middlewareContext);
135
- // 如果中间件阻止导航
136
- if (!middlewareResult.allow) {
137
- if (middlewareResult.redirect) {
138
- _logger.logger.debug(`路由导航被中间件重定向: ${middlewareResult.redirect}`);
139
- return this.navigateInternal(middlewareResult.redirect, {
140
- ...options,
141
- query: undefined
142
- }, depth + 1, visited);
143
- }
144
- _logger.logger.debug(`路由导航被中间件阻止: ${middlewareResult.reason || '未知原因'}`);
145
- return;
146
- }
147
- // 执行导航
148
- try {
149
- if (options?.replace) {
150
- router.navigate(finalPath, {
151
- replace: true,
152
- state: options.state
153
- });
154
- } else {
155
- router.navigate(finalPath, {
156
- state: options?.state
157
- });
158
- }
159
- // 执行 afterEach 钩子
160
- await lifecycleManager.afterEach({
161
- ...targetLocation,
162
- path: finalPath
163
- }, currentLocation);
164
- const duration = performance.now() - startTime;
165
- routerManager.getMonitoring().trackRoutePerformance(finalPath, {
166
- totalTime: duration
167
- });
168
- } catch (error) {
169
- _logger.logger.error('路由导航失败', error);
170
- throw error;
171
- }
172
- }
173
- /**
174
- * 导航到指定路径
175
- *
176
- * @param to - 目标路径或路由名称
177
- * @param options - 导航选项
178
- */ static async navigate(to, options) {
179
- return this.navigateInternal(to, options, 0, new Set());
180
- }
181
- /**
182
- * 获取当前路由信息
183
- *
184
- * @returns 当前路由位置信息
185
- */ static getCurrentRoute() {
186
- if (typeof window === 'undefined') {
187
- return {
188
- path: '/',
189
- query: {}
190
- };
191
- }
192
- // 从 window.location 获取当前路由信息
193
- const pathname = window.location.pathname;
194
- const search = window.location.search;
195
- const hash = window.location.hash;
196
- // 解析查询参数
197
- const query = {};
198
- if (search) {
199
- const params = new URLSearchParams(search);
200
- params.forEach((value, key)=>{
201
- query[key] = value;
202
- });
203
- }
204
- return {
205
- path: pathname + hash,
206
- query
207
- };
208
- }
209
- /**
210
- * 返回上一页
211
- *
212
- * @param fallback - 如果没有历史记录,跳转到该路径
213
- */ static async goBack(fallback) {
214
- if (window.history.length > 1) {
215
- window.history.back();
216
- } else if (fallback) {
217
- await this.navigate(fallback);
218
- } else {
219
- _logger.logger.warn('没有历史记录,无法返回');
220
- }
221
- }
222
- /**
223
- * 前进到下一页
224
- */ static goForward() {
225
- window.history.forward();
226
- }
227
- /**
228
- * 替换当前路由
229
- *
230
- * @param to - 目标路径
231
- * @param options - 导航选项
232
- */ static async replace(to, options) {
233
- return this.navigate(to, {
234
- ...options,
235
- replace: true
236
- });
237
- }
238
- };
239
- _define_property(RouterNavigation, "MAX_REDIRECTS", 10);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"RouterNavigation",{enumerable:true,get:function(){return RouterNavigation}});const _logger=require("@vlian/logger");const _lifecycle=require("../lifecycle");const _middleware=require("../middleware");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}function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap;var cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interop_require_wildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj}}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj)}var newObj={__proto__:null};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc)}else{newObj[key]=obj[key]}}}newObj.default=obj;if(cache){cache.set(obj,newObj)}return newObj}let RouterNavigation=class RouterNavigation{static buildTargetPath(to,query){const base=typeof window!=="undefined"&&window.location?.origin?window.location.origin:"http://localhost";const url=new URL(to,base);if(query&&Object.keys(query).length>0){const params=new URLSearchParams(url.search);Object.entries(query).forEach(([key,value])=>{if(value===undefined||value===null){params.delete(key);return}params.set(key,String(value))});url.search=params.toString()}return`${url.pathname}${url.search}${url.hash}`}static async navigateInternal(to,options,depth,visited){const startTime=performance.now();if(depth>this.MAX_REDIRECTS){throw new Error(`路由重定向次数超过上限(${this.MAX_REDIRECTS}),可能存在循环重定向`)}const targetPath=this.buildTargetPath(to,options?.query);if(visited.has(targetPath)){throw new Error(`检测到循环重定向: ${targetPath}`)}visited.add(targetPath);const routerManager=await Promise.resolve().then(()=>/*#__PURE__*/_interop_require_wildcard(require("../RouterManager"))).then(m=>m.getRouterManager());const router=routerManager.getRouter();if(!router){throw new Error("路由未初始化,无法导航")}const currentLocation=this.getCurrentRoute();const targetLocation={path:targetPath,query:options?.query};const lifecycleManager=(0,_lifecycle.getRouterLifecycleManager)();const beforeEachResult=await lifecycleManager.beforeEach(targetLocation,currentLocation);let finalPath=targetPath;if(beforeEachResult===false){_logger.logger.debug("路由导航被阻止: beforeEach 返回 false");return}if(typeof beforeEachResult==="string"){_logger.logger.debug(`路由导航重定向: ${beforeEachResult}`);finalPath=this.buildTargetPath(beforeEachResult)}const middlewareManager=(0,_middleware.getRouterMiddlewareManager)();const middlewareContext={to:{...targetLocation,path:finalPath},from:currentLocation,options};const middlewareResult=await middlewareManager.execute(middlewareContext);if(!middlewareResult.allow){if(middlewareResult.redirect){_logger.logger.debug(`路由导航被中间件重定向: ${middlewareResult.redirect}`);return this.navigateInternal(middlewareResult.redirect,{...options,query:undefined},depth+1,visited)}_logger.logger.debug(`路由导航被中间件阻止: ${middlewareResult.reason||"未知原因"}`);return}try{if(options?.replace){router.navigate(finalPath,{replace:true,state:options.state})}else{router.navigate(finalPath,{state:options?.state})}await lifecycleManager.afterEach({...targetLocation,path:finalPath},currentLocation);const duration=performance.now()-startTime;routerManager.getMonitoring().trackRoutePerformance(finalPath,{totalTime:duration})}catch(error){_logger.logger.error("路由导航失败",error);throw error}}static async navigate(to,options){return this.navigateInternal(to,options,0,new Set)}static getCurrentRoute(){if(typeof window==="undefined"){return{path:"/",query:{}}}const pathname=window.location.pathname;const search=window.location.search;const hash=window.location.hash;const query={};if(search){const params=new URLSearchParams(search);params.forEach((value,key)=>{query[key]=value})}return{path:pathname+hash,query}}static async goBack(fallback){if(window.history.length>1){window.history.back()}else if(fallback){await this.navigate(fallback)}else{_logger.logger.warn("没有历史记录,无法返回")}}static goForward(){window.history.forward()}static async replace(to,options){return this.navigate(to,{...options,replace:true})}};_define_property(RouterNavigation,"MAX_REDIRECTS",10);
@@ -1,20 +1 @@
1
- /**
2
- * 路由导航模块入口
3
- */ "use strict";
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- _export_star(require("./RouterNavigation"), exports);
8
- function _export_star(from, to) {
9
- Object.keys(from).forEach(function(k) {
10
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
11
- Object.defineProperty(to, k, {
12
- enumerable: true,
13
- get: function() {
14
- return from[k];
15
- }
16
- });
17
- }
18
- });
19
- return from;
20
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});_export_star(require("./RouterNavigation"),exports);function _export_star(from,to){Object.keys(from).forEach(function(k){if(k!=="default"&&!Object.prototype.hasOwnProperty.call(to,k)){Object.defineProperty(to,k,{enumerable:true,get:function(){return from[k]}})}});return from}