@vlian/framework 1.2.1 → 1.2.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analytics/index.cjs +24 -0
- package/dist/analytics/index.cjs.map +1 -0
- package/dist/analytics/index.d.ts +2 -0
- package/dist/analytics/index.js +3 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics.umd.js +2406 -0
- package/dist/analytics.umd.js.map +1 -0
- package/dist/components/LocaleSwitch.cjs +118 -0
- package/dist/components/LocaleSwitch.cjs.map +1 -0
- package/dist/components/LocaleSwitch.d.ts +21 -0
- package/dist/components/LocaleSwitch.js +103 -0
- package/dist/components/LocaleSwitch.js.map +1 -0
- package/dist/components/ThemeSwitch.cjs +117 -0
- package/dist/components/ThemeSwitch.cjs.map +1 -0
- package/dist/components/ThemeSwitch.d.ts +20 -0
- package/dist/components/ThemeSwitch.js +102 -0
- package/dist/components/ThemeSwitch.js.map +1 -0
- package/dist/components/index.cjs +16 -0
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.d.ts +5 -2
- package/dist/components/index.js +2 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/persistence.cjs +60 -0
- package/dist/components/persistence.cjs.map +1 -0
- package/dist/components/persistence.d.ts +12 -0
- package/dist/components/persistence.js +39 -0
- package/dist/components/persistence.js.map +1 -0
- package/dist/core/Test.d.ts +0 -1
- package/dist/core/app/AppContext.cjs +36 -30
- package/dist/core/app/AppContext.cjs.map +1 -1
- package/dist/core/app/AppContext.d.ts +9 -6
- package/dist/core/app/AppContext.js +36 -30
- package/dist/core/app/AppContext.js.map +1 -1
- package/dist/core/app/AppContext.types.d.ts +9 -10
- package/dist/core/app/AppContext.types.js.map +1 -1
- package/dist/core/app/BasicLayout.cjs +57 -22
- package/dist/core/app/BasicLayout.cjs.map +1 -1
- package/dist/core/app/BasicLayout.d.ts +7 -5
- package/dist/core/app/BasicLayout.js +57 -22
- package/dist/core/app/BasicLayout.js.map +1 -1
- package/dist/core/app/DefaultApp.cjs +104 -153
- package/dist/core/app/DefaultApp.cjs.map +1 -1
- package/dist/core/app/DefaultApp.d.ts +0 -21
- package/dist/core/app/DefaultApp.js +104 -153
- package/dist/core/app/DefaultApp.js.map +1 -1
- package/dist/core/app/index.d.ts +0 -1
- package/dist/core/config/AppConfig.cjs.map +1 -1
- package/dist/core/config/AppConfig.d.ts +3 -4
- package/dist/core/config/AppConfig.js.map +1 -1
- package/dist/core/config/ConfigLoader.d.ts +0 -1
- package/dist/core/config/ConfigValidator.d.ts +0 -1
- package/dist/core/config/index.d.ts +0 -1
- package/dist/core/dev/DevTools.cjs +141 -287
- package/dist/core/dev/DevTools.cjs.map +1 -1
- package/dist/core/dev/DevTools.d.ts +1 -32
- package/dist/core/dev/DevTools.js +143 -296
- package/dist/core/dev/DevTools.js.map +1 -1
- package/dist/core/error/ErrorBoundary.cjs +72 -14
- package/dist/core/error/ErrorBoundary.cjs.map +1 -1
- package/dist/core/error/ErrorBoundary.d.ts +7 -9
- package/dist/core/error/ErrorBoundary.js +73 -15
- package/dist/core/error/ErrorBoundary.js.map +1 -1
- package/dist/core/error/ErrorHandler.d.ts +0 -1
- package/dist/core/error/index.d.ts +0 -1
- package/dist/core/event/AppEventBus.d.ts +0 -1
- package/dist/core/event/frameworkEvents.d.ts +0 -1
- package/dist/core/event/hooks.d.ts +0 -1
- package/dist/core/event/index.d.ts +0 -1
- package/dist/core/event/types.d.ts +0 -1
- package/dist/core/event/useEventBus.d.ts +0 -1
- package/dist/core/index.cjs +2 -0
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.js +2 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/initialization/InitializationErrorThrower.d.ts +0 -1
- package/dist/core/initialization/index.d.ts +0 -1
- package/dist/core/initialization/initialization.d.ts +0 -1
- package/dist/core/initialization/initializationErrorState.d.ts +0 -1
- package/dist/core/kernel/defaultAdapters.cjs +185 -0
- package/dist/core/kernel/defaultAdapters.cjs.map +1 -0
- package/dist/core/kernel/defaultAdapters.d.ts +2 -0
- package/dist/core/kernel/defaultAdapters.js +175 -0
- package/dist/core/kernel/defaultAdapters.js.map +1 -0
- package/dist/core/kernel/errors.cjs +71 -0
- package/dist/core/kernel/errors.cjs.map +1 -0
- package/dist/core/kernel/errors.d.ts +18 -0
- package/dist/core/kernel/errors.js +53 -0
- package/dist/core/kernel/errors.js.map +1 -0
- package/dist/core/kernel/index.cjs +22 -0
- package/dist/core/kernel/index.cjs.map +1 -0
- package/dist/core/kernel/index.d.ts +3 -0
- package/dist/core/kernel/index.js +4 -0
- package/dist/core/kernel/index.js.map +1 -0
- package/dist/core/kernel/startKernel.cjs +203 -0
- package/dist/core/kernel/startKernel.cjs.map +1 -0
- package/dist/core/kernel/startKernel.d.ts +2 -0
- package/dist/core/kernel/startKernel.js +193 -0
- package/dist/core/kernel/startKernel.js.map +1 -0
- package/dist/core/kernel/types.cjs +6 -0
- package/dist/core/kernel/types.cjs.map +1 -0
- package/dist/core/kernel/types.d.ts +114 -0
- package/dist/core/kernel/types.js +3 -0
- package/dist/core/kernel/types.js.map +1 -0
- package/dist/core/middleware.d.ts +0 -1
- package/dist/core/plugin/PluginEventBus.d.ts +0 -1
- package/dist/core/plugin/PluginSandbox.d.ts +0 -1
- package/dist/core/plugin.cjs +1 -1
- package/dist/core/plugin.cjs.map +1 -1
- package/dist/core/plugin.d.ts +0 -1
- package/dist/core/plugin.js +1 -1
- package/dist/core/plugin.js.map +1 -1
- package/dist/core/router/RouterManager.cjs +32 -2
- package/dist/core/router/RouterManager.cjs.map +1 -1
- package/dist/core/router/RouterManager.d.ts +5 -1
- package/dist/core/router/RouterManager.js +33 -3
- package/dist/core/router/RouterManager.js.map +1 -1
- package/dist/core/router/adapter/AdapterManager.d.ts +0 -1
- package/dist/core/router/adapter/index.d.ts +0 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs.map +1 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.d.ts +0 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.js.map +1 -1
- package/dist/core/router/adapter/react-router/index.d.ts +0 -1
- package/dist/core/router/adapter/types.cjs.map +1 -1
- package/dist/core/router/adapter/types.d.ts +1 -2
- package/dist/core/router/adapter/types.js.map +1 -1
- package/dist/core/router/dev/RouterDevTools.cjs +148 -296
- package/dist/core/router/dev/RouterDevTools.cjs.map +1 -1
- package/dist/core/router/dev/RouterDevTools.d.ts +1 -6
- package/dist/core/router/dev/RouterDevTools.js +149 -301
- package/dist/core/router/dev/RouterDevTools.js.map +1 -1
- package/dist/core/router/dev/index.d.ts +0 -1
- package/dist/core/router/dynamic/DynamicRouteManager.d.ts +0 -1
- package/dist/core/router/dynamic/index.d.ts +0 -1
- package/dist/core/router/errors/RouterError.d.ts +0 -1
- package/dist/core/router/errors/index.d.ts +0 -1
- package/dist/core/router/index.d.ts +0 -1
- package/dist/core/router/lifecycle/RouterLifecycleManager.d.ts +0 -1
- package/dist/core/router/lifecycle/index.d.ts +0 -1
- package/dist/core/router/middleware/RouterMiddlewareManager.cjs +24 -4
- package/dist/core/router/middleware/RouterMiddlewareManager.cjs.map +1 -1
- package/dist/core/router/middleware/RouterMiddlewareManager.d.ts +1 -1
- package/dist/core/router/middleware/RouterMiddlewareManager.js +24 -4
- package/dist/core/router/middleware/RouterMiddlewareManager.js.map +1 -1
- package/dist/core/router/middleware/auth.d.ts +0 -1
- package/dist/core/router/middleware/index.d.ts +0 -1
- package/dist/core/router/middleware/types.cjs.map +1 -1
- package/dist/core/router/middleware/types.d.ts +1 -2
- package/dist/core/router/middleware/types.js.map +1 -1
- package/dist/core/router/monitoring/RouterMonitoring.d.ts +0 -1
- package/dist/core/router/monitoring/index.d.ts +0 -1
- package/dist/core/router/navigation/RouterNavigation.cjs +69 -14
- package/dist/core/router/navigation/RouterNavigation.cjs.map +1 -1
- package/dist/core/router/navigation/RouterNavigation.d.ts +3 -1
- package/dist/core/router/navigation/RouterNavigation.js +69 -14
- package/dist/core/router/navigation/RouterNavigation.js.map +1 -1
- package/dist/core/router/navigation/index.d.ts +0 -1
- package/dist/core/router/performance/RouteCache.cjs +34 -13
- package/dist/core/router/performance/RouteCache.cjs.map +1 -1
- package/dist/core/router/performance/RouteCache.d.ts +8 -3
- package/dist/core/router/performance/RouteCache.js +34 -13
- package/dist/core/router/performance/RouteCache.js.map +1 -1
- package/dist/core/router/performance/RoutePreloader.cjs +89 -22
- package/dist/core/router/performance/RoutePreloader.cjs.map +1 -1
- package/dist/core/router/performance/RoutePreloader.d.ts +9 -2
- package/dist/core/router/performance/RoutePreloader.js +89 -22
- package/dist/core/router/performance/RoutePreloader.js.map +1 -1
- package/dist/core/router/performance/index.d.ts +0 -1
- package/dist/core/router/plugin/RouterPluginManager.d.ts +0 -1
- package/dist/core/router/plugin/index.d.ts +0 -1
- package/dist/core/router/plugin/types.d.ts +0 -1
- package/dist/core/router/types.d.ts +23 -7
- package/dist/core/router/types.js.map +1 -1
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +90 -103
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs.map +1 -1
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.d.ts +0 -1
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js +91 -104
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js.map +1 -1
- package/dist/core/router/utils/adapters/react-router/transform.cjs +45 -63
- package/dist/core/router/utils/adapters/react-router/transform.cjs.map +1 -1
- package/dist/core/router/utils/adapters/react-router/transform.d.ts +0 -1
- package/dist/core/router/utils/adapters/react-router/transform.js +46 -59
- package/dist/core/router/utils/adapters/react-router/transform.js.map +1 -1
- package/dist/core/router/utils/transform.cjs +80 -71
- package/dist/core/router/utils/transform.cjs.map +1 -1
- package/dist/core/router/utils/transform.d.ts +1 -2
- package/dist/core/router/utils/transform.js +81 -72
- package/dist/core/router/utils/transform.js.map +1 -1
- package/dist/core/router/validation/RouterConfigValidator.d.ts +66 -5
- package/dist/core/router/validation/index.d.ts +0 -1
- package/dist/core/router/validation/schema.cjs +71 -2
- package/dist/core/router/validation/schema.cjs.map +1 -1
- package/dist/core/router/validation/schema.d.ts +102 -7
- package/dist/core/router/validation/schema.js +71 -2
- package/dist/core/router/validation/schema.js.map +1 -1
- package/dist/core/router/version/RouteVersionManager.d.ts +0 -1
- package/dist/core/router/version/index.d.ts +0 -1
- package/dist/core/splash/SplashScreen.cjs +101 -15
- package/dist/core/splash/SplashScreen.cjs.map +1 -1
- package/dist/core/splash/SplashScreen.d.ts +0 -1
- package/dist/core/splash/SplashScreen.js +101 -15
- package/dist/core/splash/SplashScreen.js.map +1 -1
- package/dist/core/splash/index.d.ts +0 -1
- package/dist/core/splash/splashScreenUtils.d.ts +0 -1
- package/dist/core/startup/AppInstance.d.ts +0 -1
- package/dist/core/startup/environment.d.ts +0 -1
- package/dist/core/startup/index.d.ts +0 -1
- package/dist/core/startup/initializeServices.d.ts +0 -1
- package/dist/core/startup/performanceTracker.d.ts +0 -1
- package/dist/core/startup/renderApp.cjs +12 -10
- package/dist/core/startup/renderApp.cjs.map +1 -1
- package/dist/core/startup/renderApp.d.ts +0 -1
- package/dist/core/startup/renderApp.js +12 -10
- package/dist/core/startup/renderApp.js.map +1 -1
- package/dist/core/startup/startApp.cjs +118 -13
- package/dist/core/startup/startApp.cjs.map +1 -1
- package/dist/core/startup/startApp.d.ts +0 -1
- package/dist/core/startup/startApp.js +118 -13
- package/dist/core/startup/startApp.js.map +1 -1
- package/dist/core/types.d.ts +34 -21
- package/dist/core/types.js.map +1 -1
- package/dist/core/ui-adapter/adapters.cjs +45 -0
- package/dist/core/ui-adapter/adapters.cjs.map +1 -0
- package/dist/core/ui-adapter/adapters.d.ts +4 -0
- package/dist/core/ui-adapter/adapters.js +27 -0
- package/dist/core/ui-adapter/adapters.js.map +1 -0
- package/dist/core/ui-adapter/index.cjs +21 -0
- package/dist/core/ui-adapter/index.cjs.map +1 -0
- package/dist/core/ui-adapter/index.d.ts +2 -0
- package/dist/core/ui-adapter/index.js +3 -0
- package/dist/core/ui-adapter/index.js.map +1 -0
- package/dist/core/ui-adapter/types.cjs +6 -0
- package/dist/core/ui-adapter/types.cjs.map +1 -0
- package/dist/core/ui-adapter/types.d.ts +24 -0
- package/dist/core/ui-adapter/types.js +3 -0
- package/dist/core/ui-adapter/types.js.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/index.umd.d.ts +0 -1
- package/dist/index.umd.js +7684 -6056
- package/dist/index.umd.js.map +1 -1
- package/dist/library/index.d.ts +0 -1
- package/dist/library/locale/index.d.ts +0 -1
- package/dist/library/locale/langs/en-us/index.d.ts +0 -1
- package/dist/library/locale/langs/zh-cn/index.d.ts +0 -1
- package/dist/library/locale/types.d.ts +0 -1
- package/dist/library/storage/cache.d.ts +0 -1
- package/dist/library/storage/encryption.d.ts +0 -1
- package/dist/library/storage/index.d.ts +0 -1
- package/dist/request/adapter/RequestAdapter.d.ts +0 -1
- package/dist/request/adapter/axiosAdapter.d.ts +0 -1
- package/dist/request/adapter/fetchAdapter.d.ts +0 -1
- package/dist/request/adapter/index.d.ts +0 -1
- package/dist/request/adapter/kyAdapter.d.ts +0 -1
- package/dist/request/adapter/undiciAdapter.d.ts +0 -1
- package/dist/request/core/RequestClient.d.ts +0 -1
- package/dist/request/core/index.d.ts +0 -1
- package/dist/request/index.d.ts +0 -1
- package/dist/request/plugin/RequestPlugin.d.ts +0 -1
- package/dist/request/plugin/cache.d.ts +0 -1
- package/dist/request/plugin/csrfPlugin.d.ts +0 -1
- package/dist/request/plugin/index.d.ts +0 -1
- package/dist/request/plugin/monitoring.d.ts +0 -1
- package/dist/request/plugin/queue.d.ts +0 -1
- package/dist/request/plugin/retry.d.ts +0 -1
- package/dist/request/plugin/validation.d.ts +0 -1
- package/dist/request/runtime/RequestContext.d.ts +0 -1
- package/dist/request/runtime/index.d.ts +0 -1
- package/dist/request/types.d.ts +0 -1
- package/dist/request/utils/RequestQueueManager.d.ts +0 -1
- package/dist/request/utils/dependencyCheck.d.ts +0 -1
- package/dist/request/utils/index.d.ts +0 -1
- package/dist/request.umd.js +5392 -0
- package/dist/request.umd.js.map +1 -0
- package/dist/state/StateManager.d.ts +0 -1
- package/dist/state/adapters/AdapterFactory.d.ts +0 -1
- package/dist/state/adapters/DefaultAdapter.d.ts +0 -1
- package/dist/state/adapters/ReduxAdapter.d.ts +0 -1
- package/dist/state/adapters/ZustandAdapter.d.ts +0 -1
- package/dist/state/adapters/index.d.ts +0 -1
- package/dist/state/adapters/types.d.ts +0 -1
- package/dist/state/core/DerivedStateInstance.d.ts +0 -1
- package/dist/state/core/StateInstance.d.ts +0 -1
- package/dist/state/core/StateRegistry.d.ts +0 -1
- package/dist/state/core/StateScope.d.ts +0 -1
- package/dist/state/core/index.d.ts +0 -1
- package/dist/state/index.d.ts +0 -1
- package/dist/state/types.d.ts +0 -1
- package/dist/state.umd.js +1414 -0
- package/dist/state.umd.js.map +1 -0
- package/dist/types.d.ts +0 -1
- package/dist/utils/analytics.d.ts +0 -1
- package/dist/utils/configSecurity.d.ts +0 -1
- package/dist/utils/csrf.d.ts +0 -1
- package/dist/utils/errors/ErrorCodes.d.ts +0 -1
- package/dist/utils/errors.cjs +44 -1
- package/dist/utils/errors.cjs.map +1 -1
- package/dist/utils/errors.d.ts +5 -1
- package/dist/utils/errors.js +44 -1
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/logger.d.ts +0 -1
- package/dist/utils/logger.types.d.ts +0 -1
- package/dist/utils/monitoring.d.ts +0 -1
- package/dist/utils/performance.d.ts +0 -1
- package/dist/utils/resourceLoader.d.ts +0 -1
- package/dist/utils/runtimeSecurity.d.ts +0 -1
- package/dist/utils/security.d.ts +0 -1
- package/dist/utils/traceId.d.ts +0 -1
- package/dist/utils/validation.d.ts +0 -1
- package/package.json +24 -9
- package/dist/components/index.d.ts.map +0 -1
- package/dist/core/Test.d.ts.map +0 -1
- package/dist/core/app/AppContext.d.ts.map +0 -1
- package/dist/core/app/AppContext.types.d.ts.map +0 -1
- package/dist/core/app/BasicLayout.d.ts.map +0 -1
- package/dist/core/app/DefaultApp.d.ts.map +0 -1
- package/dist/core/app/index.d.ts.map +0 -1
- package/dist/core/config/AppConfig.d.ts.map +0 -1
- package/dist/core/config/ConfigLoader.d.ts.map +0 -1
- package/dist/core/config/ConfigValidator.d.ts.map +0 -1
- package/dist/core/config/index.d.ts.map +0 -1
- package/dist/core/dev/DevTools.d.ts.map +0 -1
- package/dist/core/error/ErrorBoundary.d.ts.map +0 -1
- package/dist/core/error/ErrorHandler.d.ts.map +0 -1
- package/dist/core/error/index.d.ts.map +0 -1
- package/dist/core/event/AppEventBus.d.ts.map +0 -1
- package/dist/core/event/frameworkEvents.d.ts.map +0 -1
- package/dist/core/event/hooks.d.ts.map +0 -1
- package/dist/core/event/index.d.ts.map +0 -1
- package/dist/core/event/types.d.ts.map +0 -1
- package/dist/core/event/useEventBus.d.ts.map +0 -1
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/initialization/InitializationErrorThrower.d.ts.map +0 -1
- package/dist/core/initialization/index.d.ts.map +0 -1
- package/dist/core/initialization/initialization.d.ts.map +0 -1
- package/dist/core/initialization/initializationErrorState.d.ts.map +0 -1
- package/dist/core/middleware.d.ts.map +0 -1
- package/dist/core/plugin/PluginEventBus.d.ts.map +0 -1
- package/dist/core/plugin/PluginSandbox.d.ts.map +0 -1
- package/dist/core/plugin.d.ts.map +0 -1
- package/dist/core/router/RouterManager.d.ts.map +0 -1
- package/dist/core/router/adapter/AdapterManager.d.ts.map +0 -1
- package/dist/core/router/adapter/index.d.ts.map +0 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.d.ts.map +0 -1
- package/dist/core/router/adapter/react-router/index.d.ts.map +0 -1
- package/dist/core/router/adapter/types.d.ts.map +0 -1
- package/dist/core/router/dev/RouterDevTools.d.ts.map +0 -1
- package/dist/core/router/dev/index.d.ts.map +0 -1
- package/dist/core/router/dynamic/DynamicRouteManager.d.ts.map +0 -1
- package/dist/core/router/dynamic/index.d.ts.map +0 -1
- package/dist/core/router/errors/RouterError.d.ts.map +0 -1
- package/dist/core/router/errors/index.d.ts.map +0 -1
- package/dist/core/router/index.d.ts.map +0 -1
- package/dist/core/router/lifecycle/RouterLifecycleManager.d.ts.map +0 -1
- package/dist/core/router/lifecycle/index.d.ts.map +0 -1
- package/dist/core/router/middleware/RouterMiddlewareManager.d.ts.map +0 -1
- package/dist/core/router/middleware/auth.d.ts.map +0 -1
- package/dist/core/router/middleware/index.d.ts.map +0 -1
- package/dist/core/router/middleware/types.d.ts.map +0 -1
- package/dist/core/router/monitoring/RouterMonitoring.d.ts.map +0 -1
- package/dist/core/router/monitoring/index.d.ts.map +0 -1
- package/dist/core/router/navigation/RouterNavigation.d.ts.map +0 -1
- package/dist/core/router/navigation/index.d.ts.map +0 -1
- package/dist/core/router/performance/RouteCache.d.ts.map +0 -1
- package/dist/core/router/performance/RoutePreloader.d.ts.map +0 -1
- package/dist/core/router/performance/index.d.ts.map +0 -1
- package/dist/core/router/plugin/RouterPluginManager.d.ts.map +0 -1
- package/dist/core/router/plugin/index.d.ts.map +0 -1
- package/dist/core/router/plugin/types.d.ts.map +0 -1
- package/dist/core/router/types.d.ts.map +0 -1
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.d.ts.map +0 -1
- package/dist/core/router/utils/adapters/react-router/transform.d.ts.map +0 -1
- package/dist/core/router/utils/transform.d.ts.map +0 -1
- package/dist/core/router/validation/RouterConfigValidator.d.ts.map +0 -1
- package/dist/core/router/validation/index.d.ts.map +0 -1
- package/dist/core/router/validation/schema.d.ts.map +0 -1
- package/dist/core/router/version/RouteVersionManager.d.ts.map +0 -1
- package/dist/core/router/version/index.d.ts.map +0 -1
- package/dist/core/splash/SplashScreen.d.ts.map +0 -1
- package/dist/core/splash/index.d.ts.map +0 -1
- package/dist/core/splash/splashScreenUtils.d.ts.map +0 -1
- package/dist/core/startup/AppInstance.d.ts.map +0 -1
- package/dist/core/startup/environment.d.ts.map +0 -1
- package/dist/core/startup/index.d.ts.map +0 -1
- package/dist/core/startup/initializeServices.d.ts.map +0 -1
- package/dist/core/startup/performanceTracker.d.ts.map +0 -1
- package/dist/core/startup/renderApp.d.ts.map +0 -1
- package/dist/core/startup/startApp.d.ts.map +0 -1
- package/dist/core/types.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.umd.d.ts.map +0 -1
- package/dist/library/index.d.ts.map +0 -1
- package/dist/library/locale/index.d.ts.map +0 -1
- package/dist/library/locale/langs/en-us/index.d.ts.map +0 -1
- package/dist/library/locale/langs/zh-cn/index.d.ts.map +0 -1
- package/dist/library/locale/types.d.ts.map +0 -1
- package/dist/library/storage/cache.d.ts.map +0 -1
- package/dist/library/storage/encryption.d.ts.map +0 -1
- package/dist/library/storage/index.d.ts.map +0 -1
- package/dist/request/adapter/RequestAdapter.d.ts.map +0 -1
- package/dist/request/adapter/axiosAdapter.d.ts.map +0 -1
- package/dist/request/adapter/fetchAdapter.d.ts.map +0 -1
- package/dist/request/adapter/index.d.ts.map +0 -1
- package/dist/request/adapter/kyAdapter.d.ts.map +0 -1
- package/dist/request/adapter/undiciAdapter.d.ts.map +0 -1
- package/dist/request/core/RequestClient.d.ts.map +0 -1
- package/dist/request/core/index.d.ts.map +0 -1
- package/dist/request/index.d.ts.map +0 -1
- package/dist/request/plugin/RequestPlugin.d.ts.map +0 -1
- package/dist/request/plugin/cache.d.ts.map +0 -1
- package/dist/request/plugin/csrfPlugin.d.ts.map +0 -1
- package/dist/request/plugin/index.d.ts.map +0 -1
- package/dist/request/plugin/monitoring.d.ts.map +0 -1
- package/dist/request/plugin/queue.d.ts.map +0 -1
- package/dist/request/plugin/retry.d.ts.map +0 -1
- package/dist/request/plugin/validation.d.ts.map +0 -1
- package/dist/request/runtime/RequestContext.d.ts.map +0 -1
- package/dist/request/runtime/index.d.ts.map +0 -1
- package/dist/request/types.d.ts.map +0 -1
- package/dist/request/utils/RequestQueueManager.d.ts.map +0 -1
- package/dist/request/utils/dependencyCheck.d.ts.map +0 -1
- package/dist/request/utils/index.d.ts.map +0 -1
- package/dist/state/StateManager.d.ts.map +0 -1
- package/dist/state/adapters/AdapterFactory.d.ts.map +0 -1
- package/dist/state/adapters/DefaultAdapter.d.ts.map +0 -1
- package/dist/state/adapters/ReduxAdapter.d.ts.map +0 -1
- package/dist/state/adapters/ZustandAdapter.d.ts.map +0 -1
- package/dist/state/adapters/index.d.ts.map +0 -1
- package/dist/state/adapters/types.d.ts.map +0 -1
- package/dist/state/core/DerivedStateInstance.d.ts.map +0 -1
- package/dist/state/core/StateInstance.d.ts.map +0 -1
- package/dist/state/core/StateRegistry.d.ts.map +0 -1
- package/dist/state/core/StateScope.d.ts.map +0 -1
- package/dist/state/core/index.d.ts.map +0 -1
- package/dist/state/index.d.ts.map +0 -1
- package/dist/state/types.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/utils/analytics.d.ts.map +0 -1
- package/dist/utils/configSecurity.d.ts.map +0 -1
- package/dist/utils/csrf.d.ts.map +0 -1
- package/dist/utils/errors/ErrorCodes.d.ts.map +0 -1
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.types.d.ts.map +0 -1
- package/dist/utils/monitoring.d.ts.map +0 -1
- package/dist/utils/performance.d.ts.map +0 -1
- package/dist/utils/resourceLoader.d.ts.map +0 -1
- package/dist/utils/runtimeSecurity.d.ts.map +0 -1
- package/dist/utils/security.d.ts.map +0 -1
- package/dist/utils/traceId.d.ts.map +0 -1
- package/dist/utils/validation.d.ts.map +0 -1
|
@@ -37,12 +37,46 @@ export declare const routerConfigSchema: z.ZodObject<{
|
|
|
37
37
|
browser: "browser";
|
|
38
38
|
memory: "memory";
|
|
39
39
|
}>>;
|
|
40
|
-
options: z.ZodOptional<z.
|
|
40
|
+
options: z.ZodOptional<z.ZodObject<{
|
|
41
|
+
basename: z.ZodOptional<z.ZodString>;
|
|
42
|
+
future: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodBoolean, z.ZodString, z.ZodNumber]>>>;
|
|
43
|
+
hydrationData: z.ZodOptional<z.ZodUnknown>;
|
|
44
|
+
window: z.ZodOptional<z.ZodUnknown>;
|
|
45
|
+
initialEntries: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
46
|
+
initialIndex: z.ZodOptional<z.ZodNumber>;
|
|
47
|
+
}, z.core.$loose>>;
|
|
41
48
|
pathResolve: z.ZodOptional<z.ZodObject<{
|
|
42
49
|
basePath: z.ZodOptional<z.ZodString>;
|
|
43
50
|
pathAliases: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
44
51
|
}, z.core.$strip>>;
|
|
45
|
-
transformOptions: z.ZodOptional<z.
|
|
52
|
+
transformOptions: z.ZodOptional<z.ZodObject<{
|
|
53
|
+
pathValidation: z.ZodOptional<z.ZodObject<{
|
|
54
|
+
enablePathValidation: z.ZodOptional<z.ZodBoolean>;
|
|
55
|
+
allowedPathPrefixes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
56
|
+
maxPathLength: z.ZodOptional<z.ZodNumber>;
|
|
57
|
+
allowAbsolutePaths: z.ZodOptional<z.ZodBoolean>;
|
|
58
|
+
}, z.core.$strip>>;
|
|
59
|
+
performance: z.ZodOptional<z.ZodObject<{
|
|
60
|
+
enableCache: z.ZodOptional<z.ZodBoolean>;
|
|
61
|
+
cacheTTL: z.ZodOptional<z.ZodNumber>;
|
|
62
|
+
maxCacheSize: z.ZodOptional<z.ZodNumber>;
|
|
63
|
+
maxRecursionDepth: z.ZodOptional<z.ZodNumber>;
|
|
64
|
+
enableParallelProcessing: z.ZodOptional<z.ZodBoolean>;
|
|
65
|
+
parallelBatchSize: z.ZodOptional<z.ZodNumber>;
|
|
66
|
+
}, z.core.$strip>>;
|
|
67
|
+
enableDebugLog: z.ZodOptional<z.ZodBoolean>;
|
|
68
|
+
}, z.core.$loose>>;
|
|
69
|
+
preload: z.ZodOptional<z.ZodObject<{
|
|
70
|
+
strategy: z.ZodOptional<z.ZodEnum<{
|
|
71
|
+
none: "none";
|
|
72
|
+
visible: "visible";
|
|
73
|
+
all: "all";
|
|
74
|
+
"next-level": "next-level";
|
|
75
|
+
}>>;
|
|
76
|
+
delay: z.ZodOptional<z.ZodNumber>;
|
|
77
|
+
priorityThreshold: z.ZodOptional<z.ZodNumber>;
|
|
78
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
79
|
+
}, z.core.$strip>>;
|
|
46
80
|
}, z.core.$strip>;
|
|
47
81
|
/**
|
|
48
82
|
* 验证路由配置
|
|
@@ -55,12 +89,43 @@ export declare function validateRouterConfig(config: unknown): {
|
|
|
55
89
|
enabled?: boolean | "disabled" | undefined;
|
|
56
90
|
routes?: any[] | z.core.$InferOuterFunctionType<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut> | undefined;
|
|
57
91
|
mode?: "hash" | "browser" | "memory" | undefined;
|
|
58
|
-
options?:
|
|
92
|
+
options?: {
|
|
93
|
+
[x: string]: unknown;
|
|
94
|
+
basename?: string | undefined;
|
|
95
|
+
future?: Record<string, string | number | boolean> | undefined;
|
|
96
|
+
hydrationData?: unknown;
|
|
97
|
+
window?: unknown;
|
|
98
|
+
initialEntries?: string[] | undefined;
|
|
99
|
+
initialIndex?: number | undefined;
|
|
100
|
+
} | undefined;
|
|
59
101
|
pathResolve?: {
|
|
60
102
|
basePath?: string | undefined;
|
|
61
103
|
pathAliases?: Record<string, string> | undefined;
|
|
62
104
|
} | undefined;
|
|
63
|
-
transformOptions?:
|
|
105
|
+
transformOptions?: {
|
|
106
|
+
[x: string]: unknown;
|
|
107
|
+
pathValidation?: {
|
|
108
|
+
enablePathValidation?: boolean | undefined;
|
|
109
|
+
allowedPathPrefixes?: string[] | undefined;
|
|
110
|
+
maxPathLength?: number | undefined;
|
|
111
|
+
allowAbsolutePaths?: boolean | undefined;
|
|
112
|
+
} | undefined;
|
|
113
|
+
performance?: {
|
|
114
|
+
enableCache?: boolean | undefined;
|
|
115
|
+
cacheTTL?: number | undefined;
|
|
116
|
+
maxCacheSize?: number | undefined;
|
|
117
|
+
maxRecursionDepth?: number | undefined;
|
|
118
|
+
enableParallelProcessing?: boolean | undefined;
|
|
119
|
+
parallelBatchSize?: number | undefined;
|
|
120
|
+
} | undefined;
|
|
121
|
+
enableDebugLog?: boolean | undefined;
|
|
122
|
+
} | undefined;
|
|
123
|
+
preload?: {
|
|
124
|
+
strategy?: "none" | "visible" | "all" | "next-level" | undefined;
|
|
125
|
+
delay?: number | undefined;
|
|
126
|
+
priorityThreshold?: number | undefined;
|
|
127
|
+
timeout?: number | undefined;
|
|
128
|
+
} | undefined;
|
|
64
129
|
};
|
|
65
130
|
/**
|
|
66
131
|
* 安全验证路由配置(不抛出异常)
|
|
@@ -72,11 +137,41 @@ export declare function safeValidateRouterConfig(config: unknown): z.ZodSafePars
|
|
|
72
137
|
enabled?: boolean | "disabled" | undefined;
|
|
73
138
|
routes?: any[] | z.core.$InferOuterFunctionType<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut> | undefined;
|
|
74
139
|
mode?: "hash" | "browser" | "memory" | undefined;
|
|
75
|
-
options?:
|
|
140
|
+
options?: {
|
|
141
|
+
[x: string]: unknown;
|
|
142
|
+
basename?: string | undefined;
|
|
143
|
+
future?: Record<string, string | number | boolean> | undefined;
|
|
144
|
+
hydrationData?: unknown;
|
|
145
|
+
window?: unknown;
|
|
146
|
+
initialEntries?: string[] | undefined;
|
|
147
|
+
initialIndex?: number | undefined;
|
|
148
|
+
} | undefined;
|
|
76
149
|
pathResolve?: {
|
|
77
150
|
basePath?: string | undefined;
|
|
78
151
|
pathAliases?: Record<string, string> | undefined;
|
|
79
152
|
} | undefined;
|
|
80
|
-
transformOptions?:
|
|
153
|
+
transformOptions?: {
|
|
154
|
+
[x: string]: unknown;
|
|
155
|
+
pathValidation?: {
|
|
156
|
+
enablePathValidation?: boolean | undefined;
|
|
157
|
+
allowedPathPrefixes?: string[] | undefined;
|
|
158
|
+
maxPathLength?: number | undefined;
|
|
159
|
+
allowAbsolutePaths?: boolean | undefined;
|
|
160
|
+
} | undefined;
|
|
161
|
+
performance?: {
|
|
162
|
+
enableCache?: boolean | undefined;
|
|
163
|
+
cacheTTL?: number | undefined;
|
|
164
|
+
maxCacheSize?: number | undefined;
|
|
165
|
+
maxRecursionDepth?: number | undefined;
|
|
166
|
+
enableParallelProcessing?: boolean | undefined;
|
|
167
|
+
parallelBatchSize?: number | undefined;
|
|
168
|
+
} | undefined;
|
|
169
|
+
enableDebugLog?: boolean | undefined;
|
|
170
|
+
} | undefined;
|
|
171
|
+
preload?: {
|
|
172
|
+
strategy?: "none" | "visible" | "all" | "next-level" | undefined;
|
|
173
|
+
delay?: number | undefined;
|
|
174
|
+
priorityThreshold?: number | undefined;
|
|
175
|
+
timeout?: number | undefined;
|
|
176
|
+
} | undefined;
|
|
81
177
|
}>;
|
|
82
|
-
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -23,12 +23,42 @@
|
|
|
23
23
|
z.function(),
|
|
24
24
|
z.null()
|
|
25
25
|
]);
|
|
26
|
+
const routerOptionsSchema = z.object({
|
|
27
|
+
basename: z.string().optional(),
|
|
28
|
+
future: z.record(z.string(), z.union([
|
|
29
|
+
z.boolean(),
|
|
30
|
+
z.string(),
|
|
31
|
+
z.number()
|
|
32
|
+
])).optional(),
|
|
33
|
+
hydrationData: z.unknown().optional(),
|
|
34
|
+
window: z.unknown().optional(),
|
|
35
|
+
initialEntries: z.array(z.string()).optional(),
|
|
36
|
+
initialIndex: z.number().int().nonnegative().optional()
|
|
37
|
+
}).passthrough();
|
|
38
|
+
const transformOptionsSchema = z.object({
|
|
39
|
+
pathValidation: z.object({
|
|
40
|
+
enablePathValidation: z.boolean().optional(),
|
|
41
|
+
allowedPathPrefixes: z.array(z.string().min(1)).optional(),
|
|
42
|
+
maxPathLength: z.number().int().positive().optional(),
|
|
43
|
+
allowAbsolutePaths: z.boolean().optional()
|
|
44
|
+
}).optional(),
|
|
45
|
+
performance: z.object({
|
|
46
|
+
enableCache: z.boolean().optional(),
|
|
47
|
+
cacheTTL: z.number().int().positive().optional(),
|
|
48
|
+
maxCacheSize: z.number().int().positive().optional(),
|
|
49
|
+
maxRecursionDepth: z.number().int().positive().optional(),
|
|
50
|
+
enableParallelProcessing: z.boolean().optional(),
|
|
51
|
+
parallelBatchSize: z.number().int().positive().optional()
|
|
52
|
+
}).optional(),
|
|
53
|
+
enableDebugLog: z.boolean().optional()
|
|
54
|
+
}).passthrough();
|
|
26
55
|
/**
|
|
27
56
|
* RouteConfig Schema
|
|
28
57
|
*/ export const routeConfigSchema = z.lazy(()=>z.object({
|
|
29
58
|
layout: componentImportSchema.optional().nullable(),
|
|
30
59
|
page: componentImportSchema.optional().nullable(),
|
|
31
60
|
loading: componentImportSchema.optional().nullable(),
|
|
61
|
+
error: componentImportSchema.optional().nullable(),
|
|
32
62
|
errors: componentImportSchema.optional().nullable(),
|
|
33
63
|
name: z.string().min(1, '路由名称不能为空'),
|
|
34
64
|
path: z.string().optional(),
|
|
@@ -53,12 +83,51 @@
|
|
|
53
83
|
'hash',
|
|
54
84
|
'memory'
|
|
55
85
|
]).optional(),
|
|
56
|
-
options:
|
|
86
|
+
options: routerOptionsSchema.optional(),
|
|
57
87
|
pathResolve: z.object({
|
|
58
88
|
basePath: z.string().optional(),
|
|
59
89
|
pathAliases: z.record(z.string(), z.string()).optional()
|
|
60
90
|
}).optional(),
|
|
61
|
-
transformOptions:
|
|
91
|
+
transformOptions: transformOptionsSchema.optional(),
|
|
92
|
+
preload: z.object({
|
|
93
|
+
strategy: z.enum([
|
|
94
|
+
'none',
|
|
95
|
+
'next-level',
|
|
96
|
+
'all',
|
|
97
|
+
'visible'
|
|
98
|
+
]).optional(),
|
|
99
|
+
delay: z.number().int().positive().optional(),
|
|
100
|
+
priorityThreshold: z.number().int().nonnegative().optional(),
|
|
101
|
+
timeout: z.number().int().positive().optional()
|
|
102
|
+
}).optional()
|
|
103
|
+
}).superRefine((config, ctx)=>{
|
|
104
|
+
if (!Array.isArray(config.routes)) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const routeNameMap = new Map();
|
|
108
|
+
const walk = (routes, parentPath)=>{
|
|
109
|
+
routes.forEach((route, index)=>{
|
|
110
|
+
const currentPath = `${parentPath}[${index}]`;
|
|
111
|
+
const existingPath = routeNameMap.get(route.name);
|
|
112
|
+
if (existingPath) {
|
|
113
|
+
ctx.addIssue({
|
|
114
|
+
code: z.ZodIssueCode.custom,
|
|
115
|
+
path: [
|
|
116
|
+
'routes',
|
|
117
|
+
index,
|
|
118
|
+
'name'
|
|
119
|
+
],
|
|
120
|
+
message: `路由名称重复: "${route.name}",首次定义位置 ${existingPath}`
|
|
121
|
+
});
|
|
122
|
+
} else {
|
|
123
|
+
routeNameMap.set(route.name, currentPath);
|
|
124
|
+
}
|
|
125
|
+
if (Array.isArray(route.children) && route.children.length > 0) {
|
|
126
|
+
walk(route.children, `${currentPath}.children`);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
walk(config.routes, 'routes');
|
|
62
131
|
});
|
|
63
132
|
/**
|
|
64
133
|
* 验证路由配置
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/validation/schema.ts"],"sourcesContent":["/**\n * 路由配置验证 Schema(使用 Zod)\n */\n\nimport { z } from 'zod';\n\n/**\n * RouteItemHandle Schema\n */\nexport const routeItemHandleSchema = z.object({\n title: z.string().min(1, '路由标题不能为空'),\n i18nKey: z.string().optional(),\n order: z.number().int('排序值必须是整数'),\n icon: z.string().optional(),\n hideInMenu: z.boolean().optional(),\n hideFooter: z.boolean().optional(),\n keepAlive: z.boolean().optional(),\n needLogin: z.boolean().optional(),\n roles: z.array(z.string()).optional(),\n name: z.string().optional(),\n}).passthrough(); // 允许其他自定义字段\n\n/**\n * ComponentImport Schema\n * 可以是字符串路径或函数\n */\nexport const componentImportSchema = z.union([\n z.string().min(1, '组件路径不能为空'),\n z.function(),\n z.null(),\n]);\n\n/**\n * RouteConfig Schema\n */\nexport const routeConfigSchema: z.ZodType<any> = z.lazy(() =>\n z.object({\n layout: componentImportSchema.optional().nullable(),\n page: componentImportSchema.optional().nullable(),\n loading: componentImportSchema.optional().nullable(),\n errors: componentImportSchema.optional().nullable(),\n name: z.string().min(1, '路由名称不能为空'),\n path: z.string().optional(),\n isGroup: z.boolean().optional(),\n enableRedirection: z.boolean().optional(),\n handle: routeItemHandleSchema,\n children: z.array(routeConfigSchema).optional(),\n })\n);\n\n/**\n * RouterConfig Schema\n */\nexport const routerConfigSchema = z.object({\n enabled: z.union([z.boolean(), z.literal('disabled')]).optional(),\n routes: z\n .union([\n z.array(routeConfigSchema),\n z.function(),\n ])\n .optional(),\n mode: z.enum(['browser', 'hash', 'memory']).optional(),\n options: z.any().optional(), // react-router-dom 的选项类型较复杂,使用 any\n pathResolve: z\n .object({\n basePath: z.string().optional(),\n pathAliases: z.record(z.string(), z.string()).optional(),\n })\n .optional(),\n transformOptions: z.any().optional(), // TransformOptions 类型较复杂,使用 any\n});\n\n/**\n * 验证路由配置\n * \n * @param config - 要验证的路由配置\n * @returns 验证后的路由配置\n * @throws z.ZodError 如果配置验证失败\n */\nexport function validateRouterConfig(config: unknown) {\n return routerConfigSchema.parse(config);\n}\n\n/**\n * 安全验证路由配置(不抛出异常)\n * \n * @param config - 要验证的路由配置\n * @returns 验证结果\n */\nexport function safeValidateRouterConfig(config: unknown) {\n return routerConfigSchema.safeParse(config);\n}\n"],"names":["z","routeItemHandleSchema","object","title","string","min","i18nKey","optional","order","number","int","icon","hideInMenu","boolean","hideFooter","keepAlive","needLogin","roles","array","name","passthrough","componentImportSchema","union","function","null","routeConfigSchema","lazy","layout","nullable","page","loading","errors","path","isGroup","enableRedirection","handle","children","routerConfigSchema","enabled","literal","routes","mode","enum","options","any","pathResolve","basePath","pathAliases","record","transformOptions","validateRouterConfig","config","parse","safeValidateRouterConfig","safeParse"],"mappings":"AAAA;;CAEC,GAED,SAASA,CAAC,QAAQ,MAAM;AAExB;;CAEC,GACD,OAAO,MAAMC,wBAAwBD,EAAEE,MAAM,CAAC;IAC5CC,OAAOH,EAAEI,MAAM,GAAGC,GAAG,CAAC,GAAG;IACzBC,SAASN,EAAEI,MAAM,GAAGG,QAAQ;IAC5BC,OAAOR,EAAES,MAAM,GAAGC,GAAG,CAAC;IACtBC,MAAMX,EAAEI,MAAM,GAAGG,QAAQ;IACzBK,YAAYZ,EAAEa,OAAO,GAAGN,QAAQ;IAChCO,YAAYd,EAAEa,OAAO,GAAGN,QAAQ;IAChCQ,WAAWf,EAAEa,OAAO,GAAGN,QAAQ;IAC/BS,WAAWhB,EAAEa,OAAO,GAAGN,QAAQ;IAC/BU,OAAOjB,EAAEkB,KAAK,CAAClB,EAAEI,MAAM,IAAIG,QAAQ;IACnCY,MAAMnB,EAAEI,MAAM,GAAGG,QAAQ;AAC3B,GAAGa,WAAW,GAAG,CAAC,YAAY;AAE9B;;;CAGC,GACD,OAAO,MAAMC,wBAAwBrB,EAAEsB,KAAK,CAAC;IAC3CtB,EAAEI,MAAM,GAAGC,GAAG,CAAC,GAAG;IAClBL,EAAEuB,QAAQ;IACVvB,EAAEwB,IAAI;CACP,EAAE;AAEH;;CAEC,GACD,OAAO,MAAMC,oBAAoCzB,EAAE0B,IAAI,CAAC,IACtD1B,EAAEE,MAAM,CAAC;QACPyB,QAAQN,sBAAsBd,QAAQ,GAAGqB,QAAQ;QACjDC,MAAMR,sBAAsBd,QAAQ,GAAGqB,QAAQ;QAC/CE,SAAST,sBAAsBd,QAAQ,GAAGqB,QAAQ;QAClDG,QAAQV,sBAAsBd,QAAQ,GAAGqB,QAAQ;QACjDT,MAAMnB,EAAEI,MAAM,GAAGC,GAAG,CAAC,GAAG;QACxB2B,MAAMhC,EAAEI,MAAM,GAAGG,QAAQ;QACzB0B,SAASjC,EAAEa,OAAO,GAAGN,QAAQ;QAC7B2B,mBAAmBlC,EAAEa,OAAO,GAAGN,QAAQ;QACvC4B,QAAQlC;QACRmC,UAAUpC,EAAEkB,KAAK,CAACO,mBAAmBlB,QAAQ;IAC/C,IACA;AAEF;;CAEC,GACD,OAAO,MAAM8B,qBAAqBrC,EAAEE,MAAM,CAAC;IACzCoC,SAAStC,EAAEsB,KAAK,CAAC;QAACtB,EAAEa,OAAO;QAAIb,EAAEuC,OAAO,CAAC;KAAY,EAAEhC,QAAQ;IAC/DiC,QAAQxC,EACLsB,KAAK,CAAC;QACLtB,EAAEkB,KAAK,CAACO;QACRzB,EAAEuB,QAAQ;KACX,EACAhB,QAAQ;IACXkC,MAAMzC,EAAE0C,IAAI,CAAC;QAAC;QAAW;QAAQ;KAAS,EAAEnC,QAAQ;IACpDoC,SAAS3C,EAAE4C,GAAG,GAAGrC,QAAQ;IACzBsC,aAAa7C,EACVE,MAAM,CAAC;QACN4C,UAAU9C,EAAEI,MAAM,GAAGG,QAAQ;QAC7BwC,aAAa/C,EAAEgD,MAAM,CAAChD,EAAEI,MAAM,IAAIJ,EAAEI,MAAM,IAAIG,QAAQ;IACxD,GACCA,QAAQ;IACX0C,kBAAkBjD,EAAE4C,GAAG,GAAGrC,QAAQ;AACpC,GAAG;AAEH;;;;;;CAMC,GACD,OAAO,SAAS2C,qBAAqBC,MAAe;IAClD,OAAOd,mBAAmBe,KAAK,CAACD;AAClC;AAEA;;;;;CAKC,GACD,OAAO,SAASE,yBAAyBF,MAAe;IACtD,OAAOd,mBAAmBiB,SAAS,CAACH;AACtC"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/router/validation/schema.ts"],"sourcesContent":["/**\n * 路由配置验证 Schema(使用 Zod)\n */\n\nimport { z } from 'zod';\n\n/**\n * RouteItemHandle Schema\n */\nexport const routeItemHandleSchema = z.object({\n title: z.string().min(1, '路由标题不能为空'),\n i18nKey: z.string().optional(),\n order: z.number().int('排序值必须是整数'),\n icon: z.string().optional(),\n hideInMenu: z.boolean().optional(),\n hideFooter: z.boolean().optional(),\n keepAlive: z.boolean().optional(),\n needLogin: z.boolean().optional(),\n roles: z.array(z.string()).optional(),\n name: z.string().optional(),\n}).passthrough(); // 允许其他自定义字段\n\n/**\n * ComponentImport Schema\n * 可以是字符串路径或函数\n */\nexport const componentImportSchema = z.union([\n z.string().min(1, '组件路径不能为空'),\n z.function(),\n z.null(),\n]);\n\nconst routerOptionsSchema = z\n .object({\n basename: z.string().optional(),\n future: z.record(z.string(), z.union([z.boolean(), z.string(), z.number()])).optional(),\n hydrationData: z.unknown().optional(),\n window: z.unknown().optional(),\n initialEntries: z.array(z.string()).optional(),\n initialIndex: z.number().int().nonnegative().optional(),\n })\n .passthrough();\n\nconst transformOptionsSchema = z\n .object({\n pathValidation: z\n .object({\n enablePathValidation: z.boolean().optional(),\n allowedPathPrefixes: z.array(z.string().min(1)).optional(),\n maxPathLength: z.number().int().positive().optional(),\n allowAbsolutePaths: z.boolean().optional(),\n })\n .optional(),\n performance: z\n .object({\n enableCache: z.boolean().optional(),\n cacheTTL: z.number().int().positive().optional(),\n maxCacheSize: z.number().int().positive().optional(),\n maxRecursionDepth: z.number().int().positive().optional(),\n enableParallelProcessing: z.boolean().optional(),\n parallelBatchSize: z.number().int().positive().optional(),\n })\n .optional(),\n enableDebugLog: z.boolean().optional(),\n })\n .passthrough();\n\n/**\n * RouteConfig Schema\n */\nexport const routeConfigSchema: z.ZodType<any> = z.lazy(() =>\n z.object({\n layout: componentImportSchema.optional().nullable(),\n page: componentImportSchema.optional().nullable(),\n loading: componentImportSchema.optional().nullable(),\n error: componentImportSchema.optional().nullable(),\n errors: componentImportSchema.optional().nullable(),\n name: z.string().min(1, '路由名称不能为空'),\n path: z.string().optional(),\n isGroup: z.boolean().optional(),\n enableRedirection: z.boolean().optional(),\n handle: routeItemHandleSchema,\n children: z.array(routeConfigSchema).optional(),\n })\n);\n\n/**\n * RouterConfig Schema\n */\nexport const routerConfigSchema = z.object({\n enabled: z.union([z.boolean(), z.literal('disabled')]).optional(),\n routes: z\n .union([\n z.array(routeConfigSchema),\n z.function(),\n ])\n .optional(),\n mode: z.enum(['browser', 'hash', 'memory']).optional(),\n options: routerOptionsSchema.optional(),\n pathResolve: z\n .object({\n basePath: z.string().optional(),\n pathAliases: z.record(z.string(), z.string()).optional(),\n })\n .optional(),\n transformOptions: transformOptionsSchema.optional(),\n preload: z\n .object({\n strategy: z.enum(['none', 'next-level', 'all', 'visible']).optional(),\n delay: z.number().int().positive().optional(),\n priorityThreshold: z.number().int().nonnegative().optional(),\n timeout: z.number().int().positive().optional(),\n })\n .optional(),\n}).superRefine((config, ctx) => {\n if (!Array.isArray(config.routes)) {\n return;\n }\n\n const routeNameMap = new Map<string, string>();\n\n const walk = (routes: Array<z.infer<typeof routeConfigSchema>>, parentPath: string): void => {\n routes.forEach((route, index) => {\n const currentPath = `${parentPath}[${index}]`;\n const existingPath = routeNameMap.get(route.name);\n if (existingPath) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['routes', index, 'name'],\n message: `路由名称重复: \"${route.name}\",首次定义位置 ${existingPath}`,\n });\n } else {\n routeNameMap.set(route.name, currentPath);\n }\n\n if (Array.isArray(route.children) && route.children.length > 0) {\n walk(route.children as Array<z.infer<typeof routeConfigSchema>>, `${currentPath}.children`);\n }\n });\n };\n\n walk(config.routes, 'routes');\n});\n\n/**\n * 验证路由配置\n * \n * @param config - 要验证的路由配置\n * @returns 验证后的路由配置\n * @throws z.ZodError 如果配置验证失败\n */\nexport function validateRouterConfig(config: unknown) {\n return routerConfigSchema.parse(config);\n}\n\n/**\n * 安全验证路由配置(不抛出异常)\n * \n * @param config - 要验证的路由配置\n * @returns 验证结果\n */\nexport function safeValidateRouterConfig(config: unknown) {\n return routerConfigSchema.safeParse(config);\n}\n"],"names":["z","routeItemHandleSchema","object","title","string","min","i18nKey","optional","order","number","int","icon","hideInMenu","boolean","hideFooter","keepAlive","needLogin","roles","array","name","passthrough","componentImportSchema","union","function","null","routerOptionsSchema","basename","future","record","hydrationData","unknown","window","initialEntries","initialIndex","nonnegative","transformOptionsSchema","pathValidation","enablePathValidation","allowedPathPrefixes","maxPathLength","positive","allowAbsolutePaths","performance","enableCache","cacheTTL","maxCacheSize","maxRecursionDepth","enableParallelProcessing","parallelBatchSize","enableDebugLog","routeConfigSchema","lazy","layout","nullable","page","loading","error","errors","path","isGroup","enableRedirection","handle","children","routerConfigSchema","enabled","literal","routes","mode","enum","options","pathResolve","basePath","pathAliases","transformOptions","preload","strategy","delay","priorityThreshold","timeout","superRefine","config","ctx","Array","isArray","routeNameMap","Map","walk","parentPath","forEach","route","index","currentPath","existingPath","get","addIssue","code","ZodIssueCode","custom","message","set","length","validateRouterConfig","parse","safeValidateRouterConfig","safeParse"],"mappings":"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"}
|
|
@@ -122,4 +122,3 @@ export declare class RouteVersionManager {
|
|
|
122
122
|
rollback(version: string, routes: RouteConfig[]): Promise<RouteConfig[]>;
|
|
123
123
|
}
|
|
124
124
|
export declare function getRouteVersionManager(config?: RouteVersionManagerConfig): RouteVersionManager;
|
|
125
|
-
//# sourceMappingURL=RouteVersionManager.d.ts.map
|
|
@@ -10,7 +10,6 @@ Object.defineProperty(exports, "SplashScreen", {
|
|
|
10
10
|
});
|
|
11
11
|
const _jsxruntime = require("react/jsx-runtime");
|
|
12
12
|
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
13
|
-
const _antd = require("antd");
|
|
14
13
|
const _utils = require("../../utils");
|
|
15
14
|
const _initialization = require("../initialization");
|
|
16
15
|
function _getRequireWildcardCache(nodeInterop) {
|
|
@@ -63,6 +62,12 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
63
62
|
const [currentStep, setCurrentStep] = (0, _react.useState)('准备初始化...');
|
|
64
63
|
const [isInitializing, setIsInitializing] = (0, _react.useState)(false);
|
|
65
64
|
const [estimatedTime, setEstimatedTime] = (0, _react.useState)(null);
|
|
65
|
+
const [isSystemDark, setIsSystemDark] = (0, _react.useState)(()=>{
|
|
66
|
+
if (typeof window === 'undefined') {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
return window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
70
|
+
});
|
|
66
71
|
const hasCompletedRef = (0, _react.useRef)(false);
|
|
67
72
|
const onCompleteRef = (0, _react.useRef)(onComplete);
|
|
68
73
|
const optionsRef = (0, _react.useRef)(options);
|
|
@@ -182,6 +187,51 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
182
187
|
}, [
|
|
183
188
|
debouncedProgressUpdate
|
|
184
189
|
]);
|
|
190
|
+
(0, _react.useEffect)(()=>{
|
|
191
|
+
if (typeof window === 'undefined') {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
|
195
|
+
const onSystemThemeChange = (event)=>{
|
|
196
|
+
setIsSystemDark(event.matches);
|
|
197
|
+
};
|
|
198
|
+
setIsSystemDark(mediaQuery.matches);
|
|
199
|
+
if (typeof mediaQuery.addEventListener === 'function') {
|
|
200
|
+
mediaQuery.addEventListener('change', onSystemThemeChange);
|
|
201
|
+
return ()=>mediaQuery.removeEventListener('change', onSystemThemeChange);
|
|
202
|
+
}
|
|
203
|
+
mediaQuery.addListener(onSystemThemeChange);
|
|
204
|
+
return ()=>mediaQuery.removeListener(onSystemThemeChange);
|
|
205
|
+
}, []);
|
|
206
|
+
const resolvedMode = _react.default.useMemo(()=>{
|
|
207
|
+
const mode = optionsRef.current.theme?.mode || 'light';
|
|
208
|
+
if (mode === 'system') {
|
|
209
|
+
return isSystemDark ? 'dark' : 'light';
|
|
210
|
+
}
|
|
211
|
+
return mode === 'dark' ? 'dark' : 'light';
|
|
212
|
+
}, [
|
|
213
|
+
isSystemDark
|
|
214
|
+
]);
|
|
215
|
+
const palette = _react.default.useMemo(()=>{
|
|
216
|
+
if (resolvedMode === 'dark') {
|
|
217
|
+
return {
|
|
218
|
+
background: '#0b1220',
|
|
219
|
+
text: '#e2e8f0',
|
|
220
|
+
subText: '#94a3b8',
|
|
221
|
+
track: '#1f2937',
|
|
222
|
+
spinnerTrack: '#334155'
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
return {
|
|
226
|
+
background: '#f5f7fb',
|
|
227
|
+
text: '#51606f',
|
|
228
|
+
subText: '#94a3b8',
|
|
229
|
+
track: '#e9eff5',
|
|
230
|
+
spinnerTrack: '#d9e2ec'
|
|
231
|
+
};
|
|
232
|
+
}, [
|
|
233
|
+
resolvedMode
|
|
234
|
+
]);
|
|
185
235
|
// 如果提供了自定义启动屏组件,使用自定义组件
|
|
186
236
|
const CustomSplashScreen = optionsRef.current.splashScreen;
|
|
187
237
|
if (CustomSplashScreen) {
|
|
@@ -206,31 +256,64 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
206
256
|
justifyContent: 'center',
|
|
207
257
|
height: '100vh',
|
|
208
258
|
width: '100%',
|
|
209
|
-
gap: 24
|
|
259
|
+
gap: 24,
|
|
260
|
+
background: palette.background,
|
|
261
|
+
color: palette.text
|
|
210
262
|
},
|
|
211
263
|
children: [
|
|
212
|
-
/*#__PURE__*/ (0, _jsxruntime.jsx)(_antd.Spin, {
|
|
213
|
-
size: "large",
|
|
214
|
-
spinning: isInitializing,
|
|
215
|
-
"aria-label": "加载中"
|
|
216
|
-
}),
|
|
217
264
|
/*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
|
|
265
|
+
"aria-label": "加载中",
|
|
266
|
+
style: {
|
|
267
|
+
width: 42,
|
|
268
|
+
height: 42,
|
|
269
|
+
border: `4px solid ${palette.spinnerTrack}`,
|
|
270
|
+
borderTopColor: 'var(--app-primary-color, #2f80ed)',
|
|
271
|
+
borderRadius: '50%',
|
|
272
|
+
animation: 'secra-spin 1s linear infinite'
|
|
273
|
+
}
|
|
274
|
+
}),
|
|
275
|
+
/*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
|
|
218
276
|
style: {
|
|
219
277
|
width: '300px'
|
|
220
278
|
},
|
|
221
|
-
children:
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
279
|
+
children: [
|
|
280
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
|
|
281
|
+
"aria-label": `加载进度 ${progress}%`,
|
|
282
|
+
style: {
|
|
283
|
+
height: 12,
|
|
284
|
+
background: palette.track,
|
|
285
|
+
borderRadius: 999,
|
|
286
|
+
overflow: 'hidden'
|
|
287
|
+
},
|
|
288
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
|
|
289
|
+
style: {
|
|
290
|
+
width: `${Math.max(0, Math.min(100, progress))}%`,
|
|
291
|
+
height: '100%',
|
|
292
|
+
background: 'var(--app-primary-color, #2f80ed)',
|
|
293
|
+
transition: 'width 0.2s ease'
|
|
294
|
+
}
|
|
295
|
+
})
|
|
296
|
+
}),
|
|
297
|
+
/*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
|
|
298
|
+
style: {
|
|
299
|
+
marginTop: 8,
|
|
300
|
+
textAlign: 'right',
|
|
301
|
+
fontSize: 12,
|
|
302
|
+
color: palette.text
|
|
303
|
+
},
|
|
304
|
+
children: [
|
|
305
|
+
progress,
|
|
306
|
+
"%"
|
|
307
|
+
]
|
|
308
|
+
})
|
|
309
|
+
]
|
|
227
310
|
}),
|
|
228
311
|
/*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
|
|
229
312
|
role: "status",
|
|
230
313
|
"aria-live": "polite",
|
|
231
314
|
style: {
|
|
232
315
|
fontSize: 14,
|
|
233
|
-
color:
|
|
316
|
+
color: palette.text,
|
|
234
317
|
textAlign: 'center'
|
|
235
318
|
},
|
|
236
319
|
children: [
|
|
@@ -238,7 +321,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
238
321
|
estimatedTime !== null && estimatedTime > 0 && /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
|
|
239
322
|
style: {
|
|
240
323
|
fontSize: 12,
|
|
241
|
-
color:
|
|
324
|
+
color: palette.subText,
|
|
242
325
|
marginTop: 8
|
|
243
326
|
},
|
|
244
327
|
children: [
|
|
@@ -248,6 +331,9 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
248
331
|
]
|
|
249
332
|
})
|
|
250
333
|
]
|
|
334
|
+
}),
|
|
335
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)("style", {
|
|
336
|
+
children: `@keyframes secra-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }`
|
|
251
337
|
})
|
|
252
338
|
]
|
|
253
339
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/splash/SplashScreen.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef, memo, useCallback } from 'react';\nimport { Spin, Progress } from 'antd';\nimport { logger } from '../../utils';\nimport { initialization, initializationErrorState } from '../initialization';\nimport type { StartOptions, SplashScreenCustomProps } from '../types';\nimport type { InitializationContext } from '../initialization';\n\ninterface SplashScreenProps {\n options: StartOptions;\n onComplete: (context: InitializationContext) => void;\n}\n\n/**\n * 启动页组件\n * \n * 在启动页中执行初始化,并使用 Ant Design 5 的 Spin 和 Progress 组件展示启动进度\n */\nconst SplashScreen: React.FC<SplashScreenProps> = memo(({ options, onComplete }) => {\n const [progress, setProgress] = useState(0);\n const [currentStep, setCurrentStep] = useState<string>('准备初始化...');\n const [isInitializing, setIsInitializing] = useState(false);\n const [estimatedTime, setEstimatedTime] = useState<number | null>(null);\n const hasCompletedRef = useRef(false);\n const onCompleteRef = useRef(onComplete);\n const optionsRef = useRef(options);\n const startTimeRef = useRef<number>(Date.now());\n const minDisplayTimeRef = useRef<number>(options.minSplashScreenTime ?? 500); // 最小显示时间,默认 500ms\n const progressUpdateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const rafRef = useRef<number | null>(null);\n const lastProgressRef = useRef(0);\n const progressHistoryRef = useRef<Array<{ progress: number; time: number }>>([]);\n\n // 保持引用最新\n useEffect(() => {\n onCompleteRef.current = onComplete;\n optionsRef.current = options;\n minDisplayTimeRef.current = options.minSplashScreenTime ?? 500;\n }, [onComplete, options]);\n\n // 自适应防抖进度更新函数(使用 requestAnimationFrame 优化)\n const debouncedProgressUpdate = useCallback((progressValue: number, step?: string) => {\n // 取消之前的更新\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n\n // 记录进度历史用于时间预估\n const now = Date.now();\n progressHistoryRef.current.push({ progress: progressValue, time: now });\n // 只保留最近10个记录\n if (progressHistoryRef.current.length > 10) {\n progressHistoryRef.current.shift();\n }\n\n // 计算预估时间\n if (progressHistoryRef.current.length >= 2 && progressValue > 0) {\n const history = progressHistoryRef.current;\n const first = history[0]!;\n const last = history[history.length - 1]!;\n const progressDelta = last.progress - first.progress;\n const timeDelta = last.time - first.time;\n\n if (progressDelta > 0 && timeDelta > 0) {\n const progressPerMs = progressDelta / timeDelta;\n const remainingProgress = 100 - progressValue;\n const estimatedMs = remainingProgress / progressPerMs;\n setEstimatedTime(Math.max(0, Math.round(estimatedMs)));\n }\n }\n\n // 使用 requestAnimationFrame 优化更新\n rafRef.current = requestAnimationFrame(() => {\n setProgress(progressValue);\n if (step) {\n setCurrentStep(step);\n }\n lastProgressRef.current = progressValue;\n rafRef.current = null;\n });\n }, []);\n\n useEffect(() => {\n if (hasCompletedRef.current) return;\n hasCompletedRef.current = true;\n startTimeRef.current = Date.now();\n\n const performInitialization = async () => {\n try {\n setIsInitializing(true);\n setProgress(0);\n setCurrentStep('开始初始化...');\n\n logger.info('启动页开始执行初始化');\n\n // 执行初始化,传入防抖的进度回调\n const context = await initialization(optionsRef.current, (progressValue, step) => {\n debouncedProgressUpdate(progressValue, step);\n });\n\n logger.info('启动页初始化完成', context);\n\n // 动态调整最小显示时间(如果初始化很快,减少最小显示时间)\n const elapsedTime = Date.now() - startTimeRef.current;\n const dynamicMinTime = elapsedTime < 200 ? Math.min(minDisplayTimeRef.current, 300) : minDisplayTimeRef.current;\n const remainingTime = Math.max(0, dynamicMinTime - elapsedTime);\n\n if (remainingTime > 0) {\n await new Promise((resolve) => setTimeout(resolve, remainingTime));\n }\n\n // 清理防抖定时器\n if (progressUpdateTimerRef.current) {\n clearTimeout(progressUpdateTimerRef.current);\n progressUpdateTimerRef.current = null;\n }\n\n // 确保进度条显示 100%\n setProgress(100);\n setCurrentStep('初始化完成');\n\n // 初始化完成,调用回调\n onCompleteRef.current(context);\n } catch (error) {\n logger.error('启动页初始化失败:', error);\n // 设置错误状态,让 ErrorBoundary 能够捕获\n initializationErrorState.setError(error);\n setCurrentStep('初始化失败,请刷新页面重试');\n // 即使失败也调用 onComplete,让应用能够处理错误\n onCompleteRef.current({\n config: {},\n progress: 0,\n isReady: false,\n duration: 0,\n });\n } finally {\n setIsInitializing(false);\n }\n };\n\n performInitialization();\n\n // 清理函数\n return () => {\n if (progressUpdateTimerRef.current) {\n clearTimeout(progressUpdateTimerRef.current);\n }\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n };\n }, [debouncedProgressUpdate]);\n\n // 如果提供了自定义启动屏组件,使用自定义组件\n const CustomSplashScreen = optionsRef.current.splashScreen;\n if (CustomSplashScreen) {\n const customProps: SplashScreenCustomProps = {\n progress,\n currentStep,\n isInitializing,\n };\n return <CustomSplashScreen {...customProps} />;\n }\n\n // 默认启动屏 UI\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"应用正在加载\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100vh',\n width: '100%',\n gap: 24,\n }}\n >\n <Spin size=\"large\" spinning={isInitializing} aria-label=\"加载中\" />\n <div style={{ width: '300px' }}>\n <Progress\n percent={progress}\n status={isInitializing ? 'active' : 'success'}\n showInfo\n aria-label={`加载进度 ${progress}%`}\n />\n </div>\n <div\n role=\"status\"\n aria-live=\"polite\"\n style={{\n fontSize: 14,\n color: '#666',\n textAlign: 'center',\n }}\n >\n {currentStep}\n {estimatedTime !== null && estimatedTime > 0 && (\n <div style={{ fontSize: 12, color: '#999', marginTop: 8 }}>\n 预计还需 {Math.ceil(estimatedTime / 1000)} 秒\n </div>\n )}\n </div>\n </div>\n );\n});\n\nSplashScreen.displayName = 'SplashScreen';\n\nexport { SplashScreen };"],"names":["SplashScreen","memo","options","onComplete","progress","setProgress","useState","currentStep","setCurrentStep","isInitializing","setIsInitializing","estimatedTime","setEstimatedTime","hasCompletedRef","useRef","onCompleteRef","optionsRef","startTimeRef","Date","now","minDisplayTimeRef","minSplashScreenTime","progressUpdateTimerRef","rafRef","lastProgressRef","progressHistoryRef","useEffect","current","debouncedProgressUpdate","useCallback","progressValue","step","cancelAnimationFrame","push","time","length","shift","history","first","last","progressDelta","timeDelta","progressPerMs","remainingProgress","estimatedMs","Math","max","round","requestAnimationFrame","performInitialization","logger","info","context","initialization","elapsedTime","dynamicMinTime","min","remainingTime","Promise","resolve","setTimeout","clearTimeout","error","initializationErrorState","setError","config","isReady","duration","CustomSplashScreen","splashScreen","customProps","div","role","aria-live","aria-label","style","display","flexDirection","alignItems","justifyContent","height","width","gap","Spin","size","spinning","Progress","percent","status","showInfo","fontSize","color","textAlign","marginTop","ceil","displayName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/splash/SplashScreen.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef, memo, useCallback } from 'react';\nimport { logger } from '../../utils';\nimport { initialization, initializationErrorState } from '../initialization';\nimport type { StartOptions, SplashScreenCustomProps } from '../types';\nimport type { InitializationContext } from '../initialization';\n\ninterface SplashScreenProps {\n options: StartOptions;\n onComplete: (context: InitializationContext) => void;\n}\n\n/**\n * 启动页组件\n * \n * 在启动页中执行初始化,并使用 Ant Design 5 的 Spin 和 Progress 组件展示启动进度\n */\nconst SplashScreen: React.FC<SplashScreenProps> = memo(({ options, onComplete }) => {\n const [progress, setProgress] = useState(0);\n const [currentStep, setCurrentStep] = useState<string>('准备初始化...');\n const [isInitializing, setIsInitializing] = useState(false);\n const [estimatedTime, setEstimatedTime] = useState<number | null>(null);\n const [isSystemDark, setIsSystemDark] = useState<boolean>(() => {\n if (typeof window === 'undefined') {\n return false;\n }\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\n });\n const hasCompletedRef = useRef(false);\n const onCompleteRef = useRef(onComplete);\n const optionsRef = useRef(options);\n const startTimeRef = useRef<number>(Date.now());\n const minDisplayTimeRef = useRef<number>(options.minSplashScreenTime ?? 500); // 最小显示时间,默认 500ms\n const progressUpdateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const rafRef = useRef<number | null>(null);\n const lastProgressRef = useRef(0);\n const progressHistoryRef = useRef<Array<{ progress: number; time: number }>>([]);\n\n // 保持引用最新\n useEffect(() => {\n onCompleteRef.current = onComplete;\n optionsRef.current = options;\n minDisplayTimeRef.current = options.minSplashScreenTime ?? 500;\n }, [onComplete, options]);\n\n // 自适应防抖进度更新函数(使用 requestAnimationFrame 优化)\n const debouncedProgressUpdate = useCallback((progressValue: number, step?: string) => {\n // 取消之前的更新\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n\n // 记录进度历史用于时间预估\n const now = Date.now();\n progressHistoryRef.current.push({ progress: progressValue, time: now });\n // 只保留最近10个记录\n if (progressHistoryRef.current.length > 10) {\n progressHistoryRef.current.shift();\n }\n\n // 计算预估时间\n if (progressHistoryRef.current.length >= 2 && progressValue > 0) {\n const history = progressHistoryRef.current;\n const first = history[0]!;\n const last = history[history.length - 1]!;\n const progressDelta = last.progress - first.progress;\n const timeDelta = last.time - first.time;\n\n if (progressDelta > 0 && timeDelta > 0) {\n const progressPerMs = progressDelta / timeDelta;\n const remainingProgress = 100 - progressValue;\n const estimatedMs = remainingProgress / progressPerMs;\n setEstimatedTime(Math.max(0, Math.round(estimatedMs)));\n }\n }\n\n // 使用 requestAnimationFrame 优化更新\n rafRef.current = requestAnimationFrame(() => {\n setProgress(progressValue);\n if (step) {\n setCurrentStep(step);\n }\n lastProgressRef.current = progressValue;\n rafRef.current = null;\n });\n }, []);\n\n useEffect(() => {\n if (hasCompletedRef.current) return;\n hasCompletedRef.current = true;\n startTimeRef.current = Date.now();\n\n const performInitialization = async () => {\n try {\n setIsInitializing(true);\n setProgress(0);\n setCurrentStep('开始初始化...');\n\n logger.info('启动页开始执行初始化');\n\n // 执行初始化,传入防抖的进度回调\n const context = await initialization(optionsRef.current, (progressValue, step) => {\n debouncedProgressUpdate(progressValue, step);\n });\n\n logger.info('启动页初始化完成', context);\n\n // 动态调整最小显示时间(如果初始化很快,减少最小显示时间)\n const elapsedTime = Date.now() - startTimeRef.current;\n const dynamicMinTime = elapsedTime < 200 ? Math.min(minDisplayTimeRef.current, 300) : minDisplayTimeRef.current;\n const remainingTime = Math.max(0, dynamicMinTime - elapsedTime);\n\n if (remainingTime > 0) {\n await new Promise((resolve) => setTimeout(resolve, remainingTime));\n }\n\n // 清理防抖定时器\n if (progressUpdateTimerRef.current) {\n clearTimeout(progressUpdateTimerRef.current);\n progressUpdateTimerRef.current = null;\n }\n\n // 确保进度条显示 100%\n setProgress(100);\n setCurrentStep('初始化完成');\n\n // 初始化完成,调用回调\n onCompleteRef.current(context);\n } catch (error) {\n logger.error('启动页初始化失败:', error);\n // 设置错误状态,让 ErrorBoundary 能够捕获\n initializationErrorState.setError(error);\n setCurrentStep('初始化失败,请刷新页面重试');\n // 即使失败也调用 onComplete,让应用能够处理错误\n onCompleteRef.current({\n config: {},\n progress: 0,\n isReady: false,\n duration: 0,\n });\n } finally {\n setIsInitializing(false);\n }\n };\n\n performInitialization();\n\n // 清理函数\n return () => {\n if (progressUpdateTimerRef.current) {\n clearTimeout(progressUpdateTimerRef.current);\n }\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n };\n }, [debouncedProgressUpdate]);\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const onSystemThemeChange = (event: MediaQueryListEvent) => {\n setIsSystemDark(event.matches);\n };\n\n setIsSystemDark(mediaQuery.matches);\n\n if (typeof mediaQuery.addEventListener === 'function') {\n mediaQuery.addEventListener('change', onSystemThemeChange);\n return () => mediaQuery.removeEventListener('change', onSystemThemeChange);\n }\n\n mediaQuery.addListener(onSystemThemeChange);\n return () => mediaQuery.removeListener(onSystemThemeChange);\n }, []);\n\n const resolvedMode = React.useMemo<'light' | 'dark'>(() => {\n const mode = optionsRef.current.theme?.mode || 'light';\n if (mode === 'system') {\n return isSystemDark ? 'dark' : 'light';\n }\n return mode === 'dark' ? 'dark' : 'light';\n }, [isSystemDark]);\n\n const palette = React.useMemo(() => {\n if (resolvedMode === 'dark') {\n return {\n background: '#0b1220',\n text: '#e2e8f0',\n subText: '#94a3b8',\n track: '#1f2937',\n spinnerTrack: '#334155',\n };\n }\n\n return {\n background: '#f5f7fb',\n text: '#51606f',\n subText: '#94a3b8',\n track: '#e9eff5',\n spinnerTrack: '#d9e2ec',\n };\n }, [resolvedMode]);\n\n // 如果提供了自定义启动屏组件,使用自定义组件\n const CustomSplashScreen = optionsRef.current.splashScreen;\n if (CustomSplashScreen) {\n const customProps: SplashScreenCustomProps = {\n progress,\n currentStep,\n isInitializing,\n };\n return <CustomSplashScreen {...customProps} />;\n }\n\n // 默认启动屏 UI\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"应用正在加载\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100vh',\n width: '100%',\n gap: 24,\n background: palette.background,\n color: palette.text,\n }}\n >\n <div\n aria-label=\"加载中\"\n style={{\n width: 42,\n height: 42,\n border: `4px solid ${palette.spinnerTrack}`,\n borderTopColor: 'var(--app-primary-color, #2f80ed)',\n borderRadius: '50%',\n animation: 'secra-spin 1s linear infinite',\n }}\n />\n <div style={{ width: '300px' }}>\n <div\n aria-label={`加载进度 ${progress}%`}\n style={{\n height: 12,\n background: palette.track,\n borderRadius: 999,\n overflow: 'hidden',\n }}\n >\n <div\n style={{\n width: `${Math.max(0, Math.min(100, progress))}%`,\n height: '100%',\n background: 'var(--app-primary-color, #2f80ed)',\n transition: 'width 0.2s ease',\n }}\n />\n </div>\n <div style={{ marginTop: 8, textAlign: 'right', fontSize: 12, color: palette.text }}>\n {progress}%\n </div>\n </div>\n <div\n role=\"status\"\n aria-live=\"polite\"\n style={{\n fontSize: 14,\n color: palette.text,\n textAlign: 'center',\n }}\n >\n {currentStep}\n {estimatedTime !== null && estimatedTime > 0 && (\n <div style={{ fontSize: 12, color: palette.subText, marginTop: 8 }}>\n 预计还需 {Math.ceil(estimatedTime / 1000)} 秒\n </div>\n )}\n </div>\n <style>\n {`@keyframes secra-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }`}\n </style>\n </div>\n );\n});\n\nSplashScreen.displayName = 'SplashScreen';\n\nexport { SplashScreen };\n"],"names":["SplashScreen","memo","options","onComplete","progress","setProgress","useState","currentStep","setCurrentStep","isInitializing","setIsInitializing","estimatedTime","setEstimatedTime","isSystemDark","setIsSystemDark","window","matchMedia","matches","hasCompletedRef","useRef","onCompleteRef","optionsRef","startTimeRef","Date","now","minDisplayTimeRef","minSplashScreenTime","progressUpdateTimerRef","rafRef","lastProgressRef","progressHistoryRef","useEffect","current","debouncedProgressUpdate","useCallback","progressValue","step","cancelAnimationFrame","push","time","length","shift","history","first","last","progressDelta","timeDelta","progressPerMs","remainingProgress","estimatedMs","Math","max","round","requestAnimationFrame","performInitialization","logger","info","context","initialization","elapsedTime","dynamicMinTime","min","remainingTime","Promise","resolve","setTimeout","clearTimeout","error","initializationErrorState","setError","config","isReady","duration","mediaQuery","onSystemThemeChange","event","addEventListener","removeEventListener","addListener","removeListener","resolvedMode","React","useMemo","mode","theme","palette","background","text","subText","track","spinnerTrack","CustomSplashScreen","splashScreen","customProps","div","role","aria-live","aria-label","style","display","flexDirection","alignItems","justifyContent","height","width","gap","color","border","borderTopColor","borderRadius","animation","overflow","transition","marginTop","textAlign","fontSize","ceil","displayName"],"mappings":"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"}
|