@vlian/framework 1.2.18 → 1.2.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analytics.umd.js +1 -1
- package/dist/core/index.cjs +0 -1
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +1 -2
- package/dist/core/index.js +0 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/initialization/index.cjs.map +1 -1
- package/dist/core/initialization/index.d.ts +1 -1
- package/dist/core/initialization/index.js.map +1 -1
- package/dist/core/initialization/initialization.cjs +2 -147
- package/dist/core/initialization/initialization.cjs.map +1 -1
- package/dist/core/initialization/initialization.d.ts +0 -57
- package/dist/core/initialization/initialization.js +2 -148
- package/dist/core/initialization/initialization.js.map +1 -1
- package/dist/core/kernel/startKernel.cjs +1 -2
- package/dist/core/kernel/startKernel.cjs.map +1 -1
- package/dist/core/kernel/startKernel.js +1 -2
- package/dist/core/kernel/startKernel.js.map +1 -1
- package/dist/core/plugin.cjs +16 -16
- package/dist/core/plugin.cjs.map +1 -1
- package/dist/core/plugin.d.ts +5 -1
- package/dist/core/plugin.js +17 -17
- package/dist/core/plugin.js.map +1 -1
- package/dist/core/router/RouterManager.cjs +28 -9
- package/dist/core/router/RouterManager.cjs.map +1 -1
- package/dist/core/router/RouterManager.d.ts +2 -2
- package/dist/core/router/RouterManager.js +28 -9
- package/dist/core/router/RouterManager.js.map +1 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs +1 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs.map +1 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.js +1 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.js.map +1 -1
- package/dist/core/router/types.d.ts +9 -0
- package/dist/core/router/types.js.map +1 -1
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +13 -8
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs.map +1 -1
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js +13 -8
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js.map +1 -1
- package/dist/core/router/utils/adapters/react-router/transform.cjs +11 -6
- package/dist/core/router/utils/adapters/react-router/transform.cjs.map +1 -1
- package/dist/core/router/utils/adapters/react-router/transform.d.ts +1 -1
- package/dist/core/router/utils/adapters/react-router/transform.js +11 -6
- package/dist/core/router/utils/adapters/react-router/transform.js.map +1 -1
- package/dist/core/router/validation/RouterConfigValidator.d.ts +2 -0
- package/dist/core/router/validation/schema.cjs +2 -1
- package/dist/core/router/validation/schema.cjs.map +1 -1
- package/dist/core/router/validation/schema.d.ts +3 -0
- package/dist/core/router/validation/schema.js +2 -1
- package/dist/core/router/validation/schema.js.map +1 -1
- package/dist/core/startup/startApp.cjs +0 -2
- package/dist/core/startup/startApp.cjs.map +1 -1
- package/dist/core/startup/startApp.js +0 -2
- package/dist/core/startup/startApp.js.map +1 -1
- package/dist/core/types.d.ts +1 -5
- package/dist/core/types.js.map +1 -1
- package/dist/index.umd.js +77 -221
- package/dist/index.umd.js.map +1 -1
- package/dist/lazy/index.cjs +104 -0
- package/dist/lazy/index.cjs.map +1 -0
- package/dist/lazy/index.d.ts +19 -0
- package/dist/lazy/index.js +24 -0
- package/dist/lazy/index.js.map +1 -0
- package/dist/library/storage/index.cjs +1 -1
- package/dist/library/storage/index.cjs.map +1 -1
- package/dist/library/storage/index.d.ts +1 -0
- package/dist/library/storage/index.js +1 -1
- package/dist/library/storage/index.js.map +1 -1
- package/dist/request.umd.js +1 -1
- package/dist/state.umd.js +1 -1
- package/package.json +96 -2
- package/dist/core/ui-adapter/adapters.cjs +0 -45
- package/dist/core/ui-adapter/adapters.cjs.map +0 -1
- package/dist/core/ui-adapter/adapters.d.ts +0 -4
- package/dist/core/ui-adapter/adapters.js +0 -27
- package/dist/core/ui-adapter/adapters.js.map +0 -1
- package/dist/core/ui-adapter/index.cjs +0 -21
- package/dist/core/ui-adapter/index.cjs.map +0 -1
- package/dist/core/ui-adapter/index.d.ts +0 -2
- package/dist/core/ui-adapter/index.js +0 -3
- package/dist/core/ui-adapter/index.js.map +0 -1
- package/dist/core/ui-adapter/types.cjs +0 -6
- package/dist/core/ui-adapter/types.cjs.map +0 -1
- package/dist/core/ui-adapter/types.d.ts +0 -24
- package/dist/core/ui-adapter/types.js +0 -3
- package/dist/core/ui-adapter/types.js.map +0 -1
package/dist/index.umd.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @vlian/framework v1.2.
|
|
2
|
+
* @vlian/framework v1.2.25
|
|
3
3
|
* Secra Framework - 一个现代化的低代码框架
|
|
4
4
|
* (c) 2026 Secra Framework Contributors
|
|
5
5
|
* Licensed under Apache-2.0
|
|
@@ -17676,7 +17676,7 @@
|
|
|
17676
17676
|
}
|
|
17677
17677
|
/**
|
|
17678
17678
|
* 获取单例实例
|
|
17679
|
-
*
|
|
17679
|
+
*
|
|
17680
17680
|
* @returns Singleton 实例
|
|
17681
17681
|
*/ static getInstance() {
|
|
17682
17682
|
if (!Storage.instance) {
|
|
@@ -20446,7 +20446,7 @@
|
|
|
20446
20446
|
}
|
|
20447
20447
|
/**
|
|
20448
20448
|
* 插件管理器
|
|
20449
|
-
*
|
|
20449
|
+
*
|
|
20450
20450
|
* 优化:
|
|
20451
20451
|
* 1. 支持插件依赖管理
|
|
20452
20452
|
* 2. 支持插件优先级控制
|
|
@@ -20455,7 +20455,7 @@
|
|
|
20455
20455
|
*/ let PluginManager$1 = class PluginManager {
|
|
20456
20456
|
/**
|
|
20457
20457
|
* 注册插件
|
|
20458
|
-
*
|
|
20458
|
+
*
|
|
20459
20459
|
* 优化:检查插件依赖是否已注册
|
|
20460
20460
|
*/ register(plugin) {
|
|
20461
20461
|
if (this.plugins.has(plugin.name)) {
|
|
@@ -20488,7 +20488,7 @@
|
|
|
20488
20488
|
}
|
|
20489
20489
|
/**
|
|
20490
20490
|
* 获取插件加载顺序(考虑依赖和优先级)
|
|
20491
|
-
*
|
|
20491
|
+
*
|
|
20492
20492
|
* @returns 插件名称数组,按加载顺序排列
|
|
20493
20493
|
*/ getLoadOrder() {
|
|
20494
20494
|
const plugins = Array.from(this.plugins.values());
|
|
@@ -20540,7 +20540,7 @@
|
|
|
20540
20540
|
}
|
|
20541
20541
|
/**
|
|
20542
20542
|
* 动态加载插件(热插拔)
|
|
20543
|
-
*
|
|
20543
|
+
*
|
|
20544
20544
|
* @param options - 插件加载选项
|
|
20545
20545
|
* @returns 加载的插件
|
|
20546
20546
|
*/ async loadPlugin(options) {
|
|
@@ -20584,7 +20584,7 @@
|
|
|
20584
20584
|
}
|
|
20585
20585
|
/**
|
|
20586
20586
|
* 初始化单个插件
|
|
20587
|
-
*
|
|
20587
|
+
*
|
|
20588
20588
|
* @param name - 插件名称
|
|
20589
20589
|
* @param options - 启动选项
|
|
20590
20590
|
* @param context - 初始化上下文
|
|
@@ -20615,7 +20615,7 @@
|
|
|
20615
20615
|
}
|
|
20616
20616
|
/**
|
|
20617
20617
|
* 卸载插件(热插拔)
|
|
20618
|
-
*
|
|
20618
|
+
*
|
|
20619
20619
|
* @param name - 插件名称
|
|
20620
20620
|
* @param force - 是否强制卸载(即使有依赖)
|
|
20621
20621
|
*/ async unloadPlugin(name, force = false) {
|
|
@@ -20647,7 +20647,7 @@
|
|
|
20647
20647
|
}
|
|
20648
20648
|
/**
|
|
20649
20649
|
* 检查插件是否可以热加载
|
|
20650
|
-
*
|
|
20650
|
+
*
|
|
20651
20651
|
* @param plugin - 插件
|
|
20652
20652
|
* @returns 是否可以热加载
|
|
20653
20653
|
*/ canHotLoad(plugin) {
|
|
@@ -20662,7 +20662,7 @@
|
|
|
20662
20662
|
}
|
|
20663
20663
|
/**
|
|
20664
20664
|
* 注册插件加载器(用于延迟加载)
|
|
20665
|
-
*
|
|
20665
|
+
*
|
|
20666
20666
|
* @param name - 插件名称
|
|
20667
20667
|
* @param loader - 加载器函数
|
|
20668
20668
|
*/ registerLoader(name, loader) {
|
|
@@ -20670,7 +20670,7 @@
|
|
|
20670
20670
|
}
|
|
20671
20671
|
/**
|
|
20672
20672
|
* 使用加载器加载插件
|
|
20673
|
-
*
|
|
20673
|
+
*
|
|
20674
20674
|
* @param name - 插件名称
|
|
20675
20675
|
* @param options - 加载选项
|
|
20676
20676
|
* @returns 加载的插件
|
|
@@ -20717,7 +20717,7 @@
|
|
|
20717
20717
|
}
|
|
20718
20718
|
/**
|
|
20719
20719
|
* 执行初始化前钩子
|
|
20720
|
-
*
|
|
20720
|
+
*
|
|
20721
20721
|
* 优化:按依赖顺序执行
|
|
20722
20722
|
*/ async executeBeforeInit(options) {
|
|
20723
20723
|
const loadOrder = this.getLoadOrder();
|
|
@@ -20742,7 +20742,7 @@
|
|
|
20742
20742
|
}
|
|
20743
20743
|
/**
|
|
20744
20744
|
* 执行初始化钩子
|
|
20745
|
-
*
|
|
20745
|
+
*
|
|
20746
20746
|
* 优化:按依赖顺序执行,并更新插件状态
|
|
20747
20747
|
*/ async executeInit(options, context) {
|
|
20748
20748
|
const loadOrder = this.getLoadOrder();
|
|
@@ -20768,7 +20768,7 @@
|
|
|
20768
20768
|
}
|
|
20769
20769
|
/**
|
|
20770
20770
|
* 执行初始化后钩子
|
|
20771
|
-
*
|
|
20771
|
+
*
|
|
20772
20772
|
* 优化:按依赖顺序执行(逆序,确保依赖插件先执行)
|
|
20773
20773
|
*/ async executeAfterInit(options, context) {
|
|
20774
20774
|
const loadOrder = this.getLoadOrder();
|
|
@@ -20797,7 +20797,7 @@
|
|
|
20797
20797
|
}
|
|
20798
20798
|
/**
|
|
20799
20799
|
* 获取插件状态
|
|
20800
|
-
*
|
|
20800
|
+
*
|
|
20801
20801
|
* @param name - 插件名称
|
|
20802
20802
|
* @returns 插件状态
|
|
20803
20803
|
*/ getPluginStatus(name) {
|
|
@@ -20805,7 +20805,7 @@
|
|
|
20805
20805
|
}
|
|
20806
20806
|
/**
|
|
20807
20807
|
* 检查插件是否已加载
|
|
20808
|
-
*
|
|
20808
|
+
*
|
|
20809
20809
|
* @param name - 插件名称
|
|
20810
20810
|
* @returns 是否已加载
|
|
20811
20811
|
*/ isLoaded(name) {
|
|
@@ -20813,21 +20813,21 @@
|
|
|
20813
20813
|
}
|
|
20814
20814
|
/**
|
|
20815
20815
|
* 获取已加载的插件列表
|
|
20816
|
-
*
|
|
20816
|
+
*
|
|
20817
20817
|
* @returns 插件名称数组
|
|
20818
20818
|
*/ getLoadedPlugins() {
|
|
20819
20819
|
return Array.from(this.plugins.keys());
|
|
20820
20820
|
}
|
|
20821
20821
|
/**
|
|
20822
20822
|
* 获取所有插件状态
|
|
20823
|
-
*
|
|
20823
|
+
*
|
|
20824
20824
|
* @returns 插件状态映射
|
|
20825
20825
|
*/ getAllPluginStatus() {
|
|
20826
20826
|
return new Map(this.pluginStatus);
|
|
20827
20827
|
}
|
|
20828
20828
|
/**
|
|
20829
20829
|
* 获取插件沙箱
|
|
20830
|
-
*
|
|
20830
|
+
*
|
|
20831
20831
|
* @param name - 插件名称
|
|
20832
20832
|
* @returns 插件沙箱或undefined
|
|
20833
20833
|
*/ getSandbox(name) {
|
|
@@ -20863,68 +20863,6 @@
|
|
|
20863
20863
|
* 默认插件管理器
|
|
20864
20864
|
*/ const pluginManager = new PluginManager$1();
|
|
20865
20865
|
|
|
20866
|
-
/**
|
|
20867
|
-
* 配置缓存键
|
|
20868
|
-
*/ const CONFIG_CACHE_KEY = '__framework_config_cache__';
|
|
20869
|
-
/**
|
|
20870
|
-
* 加载配置(带超时、重试和缓存)
|
|
20871
|
-
*/ async function loadConfigWithRetry(loadConfig, strategy, fallbackConfig) {
|
|
20872
|
-
const timeout = strategy.configTimeout ?? 5000;
|
|
20873
|
-
const retryCount = strategy.retryCount ?? 3;
|
|
20874
|
-
const retryDelay = strategy.retryDelay ?? 1000;
|
|
20875
|
-
const enableCache = strategy.enableCache ?? true;
|
|
20876
|
-
const cacheTTL = strategy.cacheTTL ?? 5 * 60 * 1000; // 5分钟
|
|
20877
|
-
const configVersion = strategy.configVersion;
|
|
20878
|
-
// 检查缓存
|
|
20879
|
-
if (enableCache && storage.localCache) {
|
|
20880
|
-
try {
|
|
20881
|
-
const cacheKey = `${CONFIG_CACHE_KEY}_${configVersion || 'default'}`;
|
|
20882
|
-
const cached = await storage.localCache.get(cacheKey);
|
|
20883
|
-
if (cached && (!configVersion || cached.version === configVersion)) {
|
|
20884
|
-
logger.debug('使用缓存的配置');
|
|
20885
|
-
return cached.data;
|
|
20886
|
-
}
|
|
20887
|
-
} catch (error) {
|
|
20888
|
-
logger.warn('读取配置缓存失败:', error);
|
|
20889
|
-
}
|
|
20890
|
-
}
|
|
20891
|
-
// 重试加载配置
|
|
20892
|
-
let lastError = null;
|
|
20893
|
-
for(let attempt = 0; attempt <= retryCount; attempt++){
|
|
20894
|
-
try {
|
|
20895
|
-
if (attempt > 0) {
|
|
20896
|
-
logger.debug(`配置加载重试 ${attempt}/${retryCount}`);
|
|
20897
|
-
// 指数退避
|
|
20898
|
-
await new Promise((resolve)=>setTimeout(resolve, retryDelay * Math.pow(2, attempt - 1)));
|
|
20899
|
-
}
|
|
20900
|
-
const configPromise = loadConfig();
|
|
20901
|
-
const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>reject(new NetworkError('配置加载超时')), timeout));
|
|
20902
|
-
const config = await Promise.race([
|
|
20903
|
-
configPromise,
|
|
20904
|
-
timeoutPromise
|
|
20905
|
-
]);
|
|
20906
|
-
// 保存到缓存
|
|
20907
|
-
if (enableCache && storage.localCache) {
|
|
20908
|
-
try {
|
|
20909
|
-
const cacheKey = `${CONFIG_CACHE_KEY}_${configVersion || 'default'}`;
|
|
20910
|
-
await storage.localCache.set(cacheKey, {
|
|
20911
|
-
data: config,
|
|
20912
|
-
version: configVersion
|
|
20913
|
-
}, cacheTTL);
|
|
20914
|
-
} catch (error) {
|
|
20915
|
-
logger.warn('保存配置缓存失败:', error);
|
|
20916
|
-
}
|
|
20917
|
-
}
|
|
20918
|
-
return config;
|
|
20919
|
-
} catch (error) {
|
|
20920
|
-
lastError = error instanceof Error ? error : new Error(String(error));
|
|
20921
|
-
logger.warn(`配置加载失败 (尝试 ${attempt + 1}/${retryCount + 1}):`, lastError);
|
|
20922
|
-
}
|
|
20923
|
-
}
|
|
20924
|
-
// 所有重试都失败,使用降级配置
|
|
20925
|
-
logger.warn('配置加载失败,使用降级配置:', lastError);
|
|
20926
|
-
return fallbackConfig || {};
|
|
20927
|
-
}
|
|
20928
20866
|
/**
|
|
20929
20867
|
* 初始化方法
|
|
20930
20868
|
*
|
|
@@ -20956,89 +20894,8 @@
|
|
|
20956
20894
|
// 1. 设置日志级别
|
|
20957
20895
|
onProgress?.(5, '初始化日志系统...');
|
|
20958
20896
|
logger.setLevel(options.loggerLevel ?? LogLevel.INFO);
|
|
20959
|
-
// 2.
|
|
20960
|
-
|
|
20961
|
-
onProgress?.(10, '加载关键配置...');
|
|
20962
|
-
try {
|
|
20963
|
-
config = await loadConfigWithRetry(options.configStrategy.loadCriticalConfig, options.configStrategy, options.configStrategy.fallbackConfig);
|
|
20964
|
-
// 验证配置安全性
|
|
20965
|
-
if (options.configSecurity) {
|
|
20966
|
-
const securityResult = await ConfigSecurity.validateConfigSecurity(config, options.configSecurity);
|
|
20967
|
-
if (!securityResult.valid) {
|
|
20968
|
-
logger.warn('配置安全验证失败:', securityResult.errors);
|
|
20969
|
-
// 根据安全策略决定是否继续
|
|
20970
|
-
}
|
|
20971
|
-
}
|
|
20972
|
-
options.configStrategy.onConfigLoaded?.(config);
|
|
20973
|
-
onProgress?.(30, '关键配置加载完成');
|
|
20974
|
-
} catch (error) {
|
|
20975
|
-
logger.warn('关键配置加载失败,使用默认配置:', error);
|
|
20976
|
-
config = options.configStrategy.fallbackConfig || {};
|
|
20977
|
-
options.configStrategy.onConfigLoaded?.(config);
|
|
20978
|
-
onProgress?.(30, '使用默认配置');
|
|
20979
|
-
}
|
|
20980
|
-
} else {
|
|
20981
|
-
onProgress?.(30);
|
|
20982
|
-
}
|
|
20983
|
-
// 2.5. 渐进式加载非关键配置(在应用渲染后异步加载)
|
|
20984
|
-
if (options.configStrategy?.loadNonCriticalConfig) {
|
|
20985
|
-
// 智能延迟加载:根据网络状况动态调整延迟时间
|
|
20986
|
-
const getDelayTime = ()=>{
|
|
20987
|
-
if (typeof navigator === 'undefined' || !('connection' in navigator)) {
|
|
20988
|
-
return 1000; // 默认延迟
|
|
20989
|
-
}
|
|
20990
|
-
const connection = navigator.connection;
|
|
20991
|
-
if (!connection) {
|
|
20992
|
-
return 1000;
|
|
20993
|
-
}
|
|
20994
|
-
// 根据网络类型调整延迟
|
|
20995
|
-
const effectiveType = connection.effectiveType;
|
|
20996
|
-
switch(effectiveType){
|
|
20997
|
-
case 'slow-2g':
|
|
20998
|
-
case '2g':
|
|
20999
|
-
return 3000; // 慢网络延迟更久
|
|
21000
|
-
case '3g':
|
|
21001
|
-
return 2000;
|
|
21002
|
-
case '4g':
|
|
21003
|
-
default:
|
|
21004
|
-
return 500; // 快网络可以更快加载
|
|
21005
|
-
}
|
|
21006
|
-
};
|
|
21007
|
-
// 使用 requestIdleCallback 在空闲时加载
|
|
21008
|
-
if (typeof requestIdleCallback !== 'undefined') {
|
|
21009
|
-
requestIdleCallback(async ()=>{
|
|
21010
|
-
try {
|
|
21011
|
-
const nonCriticalConfig = await loadConfigWithRetry(options.configStrategy.loadNonCriticalConfig, options.configStrategy, {});
|
|
21012
|
-
// 合并到主配置
|
|
21013
|
-
config = {
|
|
21014
|
-
...config,
|
|
21015
|
-
...nonCriticalConfig
|
|
21016
|
-
};
|
|
21017
|
-
options.configStrategy?.onConfigLoaded?.(config);
|
|
21018
|
-
logger.debug('非关键配置加载完成');
|
|
21019
|
-
} catch (error) {
|
|
21020
|
-
logger.warn('非关键配置加载失败:', error);
|
|
21021
|
-
}
|
|
21022
|
-
}, {
|
|
21023
|
-
timeout: getDelayTime()
|
|
21024
|
-
});
|
|
21025
|
-
} else {
|
|
21026
|
-
// 降级方案:智能延迟加载
|
|
21027
|
-
setTimeout(async ()=>{
|
|
21028
|
-
try {
|
|
21029
|
-
const nonCriticalConfig = await loadConfigWithRetry(options.configStrategy.loadNonCriticalConfig, options.configStrategy, {});
|
|
21030
|
-
config = {
|
|
21031
|
-
...config,
|
|
21032
|
-
...nonCriticalConfig
|
|
21033
|
-
};
|
|
21034
|
-
options.configStrategy?.onConfigLoaded?.(config);
|
|
21035
|
-
logger.debug('非关键配置加载完成');
|
|
21036
|
-
} catch (error) {
|
|
21037
|
-
logger.warn('非关键配置加载失败:', error);
|
|
21038
|
-
}
|
|
21039
|
-
}, getDelayTime());
|
|
21040
|
-
}
|
|
21041
|
-
}
|
|
20897
|
+
// 2. 预留配置阶段
|
|
20898
|
+
onProgress?.(30);
|
|
21042
20899
|
// 3. 初始化之前回调
|
|
21043
20900
|
if (options.lifecycle?.beforeInitialization) {
|
|
21044
20901
|
onProgress?.(35, '执行初始化前回调...');
|
|
@@ -25683,8 +25540,13 @@
|
|
|
25683
25540
|
const isDevelopment = process.env.NODE_ENV === 'development';
|
|
25684
25541
|
const RouteErrorBoundary = ({ error, resetErrorBoundary })=>{
|
|
25685
25542
|
const [showDetails, setShowDetails] = React.useState(false);
|
|
25686
|
-
const
|
|
25687
|
-
const
|
|
25543
|
+
const errorObject = error !== null && typeof error === 'object' ? error : null;
|
|
25544
|
+
const errorMessage = typeof errorObject?.message === 'string' && errorObject.message !== '' ? errorObject.message : '未知错误';
|
|
25545
|
+
const hasCause = errorObject?.cause !== undefined;
|
|
25546
|
+
const isNotFoundError = errorObject?.status === 404 || typeof errorObject?.statusText === 'string' && /not\s*found/i.test(errorObject.statusText) || /no routes matched location|not found|404/i.test(errorMessage);
|
|
25547
|
+
const title = isNotFoundError ? '页面不存在(404)' : '出错了,请稍后再试';
|
|
25548
|
+
const friendlyMessage = isNotFoundError ? '访问的路由未注册或不存在,请检查访问地址。' : '请稍后再试或联系技术支持';
|
|
25549
|
+
const displayMessage = isDevelopment ? errorMessage : friendlyMessage;
|
|
25688
25550
|
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
25689
25551
|
role: "alert",
|
|
25690
25552
|
style: {
|
|
@@ -25707,10 +25569,10 @@
|
|
|
25707
25569
|
style: {
|
|
25708
25570
|
marginTop: 0
|
|
25709
25571
|
},
|
|
25710
|
-
children:
|
|
25572
|
+
children: title
|
|
25711
25573
|
}),
|
|
25712
25574
|
/*#__PURE__*/ jsxRuntime.jsx("p", {
|
|
25713
|
-
children:
|
|
25575
|
+
children: displayMessage
|
|
25714
25576
|
}),
|
|
25715
25577
|
/*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
25716
25578
|
style: {
|
|
@@ -25761,10 +25623,10 @@
|
|
|
25761
25623
|
/*#__PURE__*/ jsxRuntime.jsx("strong", {
|
|
25762
25624
|
children: "错误信息:"
|
|
25763
25625
|
}),
|
|
25764
|
-
|
|
25626
|
+
errorMessage
|
|
25765
25627
|
]
|
|
25766
25628
|
}),
|
|
25767
|
-
|
|
25629
|
+
errorObject?.stack && /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
25768
25630
|
style: {
|
|
25769
25631
|
marginBottom: 10,
|
|
25770
25632
|
whiteSpace: 'pre-wrap',
|
|
@@ -25775,7 +25637,7 @@
|
|
|
25775
25637
|
children: "堆栈:"
|
|
25776
25638
|
}),
|
|
25777
25639
|
/*#__PURE__*/ jsxRuntime.jsx("br", {}),
|
|
25778
|
-
|
|
25640
|
+
errorObject.stack
|
|
25779
25641
|
]
|
|
25780
25642
|
}),
|
|
25781
25643
|
hasCause && /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
@@ -25783,7 +25645,7 @@
|
|
|
25783
25645
|
/*#__PURE__*/ jsxRuntime.jsx("strong", {
|
|
25784
25646
|
children: "原因:"
|
|
25785
25647
|
}),
|
|
25786
|
-
|
|
25648
|
+
errorObject?.cause instanceof Error ? errorObject.cause.message : String(errorObject?.cause)
|
|
25787
25649
|
]
|
|
25788
25650
|
})
|
|
25789
25651
|
]
|
|
@@ -25803,7 +25665,7 @@
|
|
|
25803
25665
|
children: "Loading..."
|
|
25804
25666
|
});
|
|
25805
25667
|
}
|
|
25806
|
-
const transformRoutesToReactRoutes = async (routes, transformResult, defaultRouteErrorComponent, defaultRouteLoadingComponent)=>{
|
|
25668
|
+
const transformRoutesToReactRoutes = async (routes, transformResult, defaultRouteErrorComponent, defaultRouteLoadingComponent, enableHydrateFallback = false)=>{
|
|
25807
25669
|
/**
|
|
25808
25670
|
* 批量处理路由
|
|
25809
25671
|
* @param routes 路由组
|
|
@@ -25934,28 +25796,31 @@
|
|
|
25934
25796
|
}
|
|
25935
25797
|
const reactRoute = {
|
|
25936
25798
|
children: [],
|
|
25937
|
-
hydrateFallbackElement: /*#__PURE__*/ jsxRuntime.jsx(DefaultRouteHydrateFallback, {}),
|
|
25938
25799
|
id: name,
|
|
25939
25800
|
handle: getHandle(),
|
|
25940
25801
|
lazy: async ()=>{
|
|
25941
25802
|
const ErrorBoundary = await getErrorComponent();
|
|
25942
25803
|
const config = await getConfig();
|
|
25943
25804
|
const LoadingComponent = await getLoadingComponent();
|
|
25805
|
+
const HydrateFallback = LoadingComponent?.default ?? DefaultRouteHydrateFallback;
|
|
25944
25806
|
// 如果配置为空,确保至少返回一个空对象,避免展开 undefined
|
|
25945
25807
|
if (!config) {
|
|
25946
25808
|
return {
|
|
25947
25809
|
ErrorBoundary: ErrorBoundary?.default,
|
|
25948
|
-
HydrateFallback
|
|
25810
|
+
HydrateFallback
|
|
25949
25811
|
};
|
|
25950
25812
|
}
|
|
25951
25813
|
return {
|
|
25952
25814
|
ErrorBoundary: ErrorBoundary?.default,
|
|
25953
|
-
HydrateFallback
|
|
25815
|
+
HydrateFallback,
|
|
25954
25816
|
...config
|
|
25955
25817
|
};
|
|
25956
25818
|
},
|
|
25957
25819
|
path
|
|
25958
25820
|
};
|
|
25821
|
+
if (enableHydrateFallback) {
|
|
25822
|
+
reactRoute.hydrateFallbackElement = /*#__PURE__*/ jsxRuntime.jsx(DefaultRouteHydrateFallback, {});
|
|
25823
|
+
}
|
|
25959
25824
|
// 处理子路由
|
|
25960
25825
|
if (children?.length) {
|
|
25961
25826
|
reactRoute.children = children.flatMap((child)=>transformRouteToReactRoute(child)).sort((a, b)=>{
|
|
@@ -25970,9 +25835,10 @@
|
|
|
25970
25835
|
lazy: async ()=>{
|
|
25971
25836
|
const ErrorBoundary = await getErrorComponent();
|
|
25972
25837
|
const LoadingComponent = await getLoadingComponent();
|
|
25838
|
+
const HydrateFallback = LoadingComponent?.default ?? DefaultRouteHydrateFallback;
|
|
25973
25839
|
return {
|
|
25974
25840
|
ErrorBoundary: ErrorBoundary?.default,
|
|
25975
|
-
HydrateFallback
|
|
25841
|
+
HydrateFallback,
|
|
25976
25842
|
...await getConfig(true)
|
|
25977
25843
|
};
|
|
25978
25844
|
}
|
|
@@ -26002,9 +25868,10 @@
|
|
|
26002
25868
|
lazy: async ()=>{
|
|
26003
25869
|
const ErrorBoundary = await getErrorComponent();
|
|
26004
25870
|
const LoadingComponent = await getLoadingComponent();
|
|
25871
|
+
const HydrateFallback = LoadingComponent?.default ?? DefaultRouteHydrateFallback;
|
|
26005
25872
|
return {
|
|
26006
25873
|
ErrorBoundary: ErrorBoundary?.default,
|
|
26007
|
-
HydrateFallback
|
|
25874
|
+
HydrateFallback,
|
|
26008
25875
|
...await getConfig(true)
|
|
26009
25876
|
};
|
|
26010
25877
|
}
|
|
@@ -26114,7 +25981,8 @@
|
|
|
26114
25981
|
delay: zod.z.number().int().positive().optional(),
|
|
26115
25982
|
priorityThreshold: zod.z.number().int().nonnegative().optional(),
|
|
26116
25983
|
timeout: zod.z.number().int().positive().optional()
|
|
26117
|
-
}).optional()
|
|
25984
|
+
}).optional(),
|
|
25985
|
+
enableHydrateFallback: zod.z.boolean().optional()
|
|
26118
25986
|
}).superRefine((config, ctx)=>{
|
|
26119
25987
|
if (!Array.isArray(config.routes)) {
|
|
26120
25988
|
return;
|
|
@@ -28014,7 +27882,7 @@
|
|
|
28014
27882
|
*/ async initialize(config) {
|
|
28015
27883
|
// 转换路由配置
|
|
28016
27884
|
const transformResult = await transformRoutes(config.routes);
|
|
28017
|
-
const reactRoutes = await transformRoutesToReactRoutes(transformResult.routes, transformResult, config.defaultRouteErrorComponent, config.defaultRouteLoadingComponent);
|
|
27885
|
+
const reactRoutes = await transformRoutesToReactRoutes(transformResult.routes, transformResult, config.defaultRouteErrorComponent, config.defaultRouteLoadingComponent, Boolean(config.options?.hydrationData));
|
|
28018
27886
|
// 创建路由实例
|
|
28019
27887
|
const mode = config.mode || 'browser';
|
|
28020
27888
|
if (mode === 'browser') {
|
|
@@ -28185,14 +28053,15 @@
|
|
|
28185
28053
|
// 缓存转换结果
|
|
28186
28054
|
this.cache.set(cacheKey, result);
|
|
28187
28055
|
}
|
|
28188
|
-
const
|
|
28056
|
+
const enableHydrateFallback = config.enableHydrateFallback ?? Boolean(config.options?.hydrationData);
|
|
28057
|
+
const reactRoutes = await transformRoutesToReactRoutes(result.routes, result, config.defaultRouteErrorComponent, config.defaultRouteLoadingComponent, enableHydrateFallback);
|
|
28189
28058
|
// 注册路由到预加载器
|
|
28190
28059
|
if (result.routes) {
|
|
28191
28060
|
this.preloader.registerRoutes(result.routes, result);
|
|
28192
28061
|
// 开始预加载
|
|
28193
28062
|
this.preloader.startPreload();
|
|
28194
28063
|
}
|
|
28195
|
-
await this.resolveInitialLazyRoutes(reactRoutes);
|
|
28064
|
+
await this.resolveInitialLazyRoutes(reactRoutes, !enableHydrateFallback);
|
|
28196
28065
|
let routerInstance = null;
|
|
28197
28066
|
if (config.mode === 'browser') {
|
|
28198
28067
|
routerInstance = reactRouterDom.createBrowserRouter(reactRoutes, config.options);
|
|
@@ -28225,17 +28094,35 @@
|
|
|
28225
28094
|
logger.info('路由管理器初始化完成');
|
|
28226
28095
|
}
|
|
28227
28096
|
/**
|
|
28228
|
-
*
|
|
28229
|
-
*
|
|
28230
|
-
*/ async resolveInitialLazyRoutes(routes) {
|
|
28097
|
+
* 预解析 lazy 路由,避免首屏或重定向链路长时间停留在 hydrate fallback。
|
|
28098
|
+
* resolveAll=true 时会在初始化阶段解析全部 lazy 路由。
|
|
28099
|
+
*/ async resolveInitialLazyRoutes(routes, resolveAll = false) {
|
|
28231
28100
|
if (typeof window === 'undefined') {
|
|
28232
28101
|
return;
|
|
28233
28102
|
}
|
|
28234
|
-
|
|
28235
|
-
if (
|
|
28236
|
-
|
|
28103
|
+
let targetRoutes = [];
|
|
28104
|
+
if (resolveAll) {
|
|
28105
|
+
const stack = [
|
|
28106
|
+
...routes
|
|
28107
|
+
];
|
|
28108
|
+
while(stack.length > 0){
|
|
28109
|
+
const current = stack.shift();
|
|
28110
|
+
if (!current) {
|
|
28111
|
+
continue;
|
|
28112
|
+
}
|
|
28113
|
+
targetRoutes.push(current);
|
|
28114
|
+
if (current.children && current.children.length > 0) {
|
|
28115
|
+
stack.push(...current.children);
|
|
28116
|
+
}
|
|
28117
|
+
}
|
|
28118
|
+
} else {
|
|
28119
|
+
const matches = reactRouterDom.matchRoutes(routes, window.location.pathname) ?? [];
|
|
28120
|
+
if (matches.length === 0) {
|
|
28121
|
+
return;
|
|
28122
|
+
}
|
|
28123
|
+
targetRoutes = matches.map((match)=>match.route);
|
|
28237
28124
|
}
|
|
28238
|
-
await Promise.all(
|
|
28125
|
+
await Promise.all(targetRoutes.map(async (route)=>{
|
|
28239
28126
|
const lazy = route.lazy;
|
|
28240
28127
|
if (typeof lazy !== 'function') {
|
|
28241
28128
|
return;
|
|
@@ -29663,8 +29550,7 @@
|
|
|
29663
29550
|
const initContext = await initialization({
|
|
29664
29551
|
loggerLevel: options.loggerLevel,
|
|
29665
29552
|
locale: i18n.resources,
|
|
29666
|
-
lifecycle: options.lifecycle
|
|
29667
|
-
configStrategy: undefined
|
|
29553
|
+
lifecycle: options.lifecycle
|
|
29668
29554
|
});
|
|
29669
29555
|
await options.lifecycle?.afterInitialization?.(initContext);
|
|
29670
29556
|
});
|
|
@@ -29796,8 +29682,6 @@
|
|
|
29796
29682
|
// 3. 使用无 UI Kernel 管理启动阶段(配置、主题、i18n、服务注入、统一错误处理)
|
|
29797
29683
|
const kernelRuntime = await startKernel({
|
|
29798
29684
|
loggerLevel: options.loggerLevel,
|
|
29799
|
-
configLoader: options.configStrategy?.loadCriticalConfig,
|
|
29800
|
-
configFallback: options.configStrategy?.fallbackConfig,
|
|
29801
29685
|
locale: {
|
|
29802
29686
|
locale: (options.locale ? Object.keys(options.locale)[0] : 'zh-CN') || 'zh-CN',
|
|
29803
29687
|
resources: options.locale
|
|
@@ -30345,32 +30229,6 @@
|
|
|
30345
30229
|
}
|
|
30346
30230
|
}
|
|
30347
30231
|
|
|
30348
|
-
function buildAntdCompatTheme(theme) {
|
|
30349
|
-
const token = {
|
|
30350
|
-
...theme.tokens || {}
|
|
30351
|
-
};
|
|
30352
|
-
if (theme.primaryColor) {
|
|
30353
|
-
token.colorPrimary = theme.primaryColor;
|
|
30354
|
-
}
|
|
30355
|
-
return {
|
|
30356
|
-
...theme.compatibility?.antd || {},
|
|
30357
|
-
token
|
|
30358
|
-
};
|
|
30359
|
-
}
|
|
30360
|
-
function buildShadcnCompatTheme(theme) {
|
|
30361
|
-
const cssVariables = {
|
|
30362
|
-
...theme.compatibility?.shadcn || {},
|
|
30363
|
-
...theme.tokens || {}
|
|
30364
|
-
};
|
|
30365
|
-
if (theme.primaryColor) {
|
|
30366
|
-
cssVariables['app-primary-color'] = theme.primaryColor;
|
|
30367
|
-
}
|
|
30368
|
-
return {
|
|
30369
|
-
cssVariables,
|
|
30370
|
-
className: theme.mode === 'dark' ? 'dark' : theme.mode === 'light' ? 'light' : 'system'
|
|
30371
|
-
};
|
|
30372
|
-
}
|
|
30373
|
-
|
|
30374
30232
|
function _define_property$8(obj, key, value) {
|
|
30375
30233
|
if (key in obj) {
|
|
30376
30234
|
Object.defineProperty(obj, key, {
|
|
@@ -34148,8 +34006,6 @@
|
|
|
34148
34006
|
exports.adapterRegistry = adapterRegistry;
|
|
34149
34007
|
exports.appConfig = appConfig;
|
|
34150
34008
|
exports.axiosAdapter = axiosAdapter;
|
|
34151
|
-
exports.buildAntdCompatTheme = buildAntdCompatTheme;
|
|
34152
|
-
exports.buildShadcnCompatTheme = buildShadcnCompatTheme;
|
|
34153
34009
|
exports.cancelRequestContext = cancelRequestContext;
|
|
34154
34010
|
exports.clearCurrentTraceId = clearCurrentTraceId;
|
|
34155
34011
|
exports.commonSchemas = commonSchemas;
|