@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
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import React from "react";
|
|
3
2
|
import { Navigate } from "react-router-dom";
|
|
4
3
|
import { RouteErrorBoundary } from "./RouteErrorBoundary";
|
|
5
|
-
import {
|
|
4
|
+
import { logger } from "../../../../../utils";
|
|
5
|
+
function DefaultRouteHydrateFallback() {
|
|
6
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
7
|
+
style: {
|
|
8
|
+
padding: 16,
|
|
9
|
+
textAlign: 'center',
|
|
10
|
+
color: '#5f6c7b'
|
|
11
|
+
},
|
|
12
|
+
children: "Loading..."
|
|
13
|
+
});
|
|
14
|
+
}
|
|
6
15
|
export const transformRoutesToReactRoutes = async (routes, transformResult, defaultRouteErrorComponent, defaultRouteLoadingComponent)=>{
|
|
7
16
|
/**
|
|
8
17
|
* 批量处理路由
|
|
@@ -14,18 +23,19 @@ export const transformRoutesToReactRoutes = async (routes, transformResult, defa
|
|
|
14
23
|
* 处理单个路由
|
|
15
24
|
* @param route 路由
|
|
16
25
|
*/ function transformRouteToReactRoute(route) {
|
|
17
|
-
const { isGroup = false, enableRedirection = false, name, path, handle, children, page, layout,
|
|
26
|
+
const { isGroup = false, enableRedirection = false, name, path, handle, children, page, layout, error, errors, loading } = route;
|
|
27
|
+
const routeError = error ?? errors;
|
|
18
28
|
// 获取错误组件
|
|
19
29
|
async function getErrorComponent() {
|
|
20
|
-
// 如果 errors 是函数,直接使用
|
|
21
|
-
if (typeof
|
|
22
|
-
return
|
|
30
|
+
// 如果 error/errors 是函数,直接使用
|
|
31
|
+
if (typeof routeError === 'function') {
|
|
32
|
+
return routeError();
|
|
23
33
|
}
|
|
24
34
|
const errorsMap = transformResult.errors;
|
|
25
|
-
// 判断 errors 是否为 string 且不是空字符串
|
|
26
|
-
if (typeof
|
|
27
|
-
// 使用
|
|
28
|
-
const errorResolver = errorsMap.get(
|
|
35
|
+
// 判断 error/errors 是否为 string 且不是空字符串
|
|
36
|
+
if (typeof routeError === 'string' && routeError !== '') {
|
|
37
|
+
// 使用 routeError 作为 key 获取 transformResult.errors 的值
|
|
38
|
+
const errorResolver = errorsMap.get(routeError);
|
|
29
39
|
// 如果获取不到,返回 null
|
|
30
40
|
if (!errorResolver) {
|
|
31
41
|
return null;
|
|
@@ -50,52 +60,6 @@ export const transformRoutesToReactRoutes = async (routes, transformResult, defa
|
|
|
50
60
|
default: RouteErrorBoundary
|
|
51
61
|
};
|
|
52
62
|
}
|
|
53
|
-
// 获取默认加载组件(配置的或内置的 Spin)
|
|
54
|
-
function getDefaultLoadingComponent() {
|
|
55
|
-
if (defaultRouteLoadingComponent) {
|
|
56
|
-
// 如果配置了默认加载组件,使用 React.lazy 包装
|
|
57
|
-
// 使用懒加载是因为用户可能希望自定义组件支持代码分割
|
|
58
|
-
return /*#__PURE__*/ React.lazy(()=>defaultRouteLoadingComponent().then((module)=>({
|
|
59
|
-
default: module.default || module
|
|
60
|
-
})));
|
|
61
|
-
}
|
|
62
|
-
// 如果没有配置默认加载组件,使用 antd 的 Spin 作为默认组件
|
|
63
|
-
// 直接导入而非懒加载,因为:
|
|
64
|
-
// 1. Spin 是 antd 的基础组件,体积小
|
|
65
|
-
// 2. 加载组件需要快速显示,直接导入速度更快
|
|
66
|
-
// 3. 作为基础设施组件,应该保证可用性
|
|
67
|
-
return Spin;
|
|
68
|
-
}
|
|
69
|
-
// 获取加载组件
|
|
70
|
-
function getLoadingComponent() {
|
|
71
|
-
// 如果 loading 是函数,直接使用 React.lazy 包装
|
|
72
|
-
if (typeof loading === 'function') {
|
|
73
|
-
return /*#__PURE__*/ React.lazy(()=>loading().then((module)=>({
|
|
74
|
-
default: module.default || module
|
|
75
|
-
})));
|
|
76
|
-
}
|
|
77
|
-
const loadingsMap = transformResult.loadings;
|
|
78
|
-
// 判断 loading 是否为 string 且不是空字符串
|
|
79
|
-
if (typeof loading === 'string' && loading !== '') {
|
|
80
|
-
// 使用 loading 作为 key 获取 transformResult.loadings 的值
|
|
81
|
-
const loadingResolver = loadingsMap.get(loading);
|
|
82
|
-
// 如果获取不到,使用默认加载组件
|
|
83
|
-
if (!loadingResolver) {
|
|
84
|
-
return getDefaultLoadingComponent();
|
|
85
|
-
}
|
|
86
|
-
// 如果获取到,使用 React.lazy 包装动态导入函数
|
|
87
|
-
// loadingResolver 是一个返回 Promise 的函数,Promise resolve 后的值是组件模块
|
|
88
|
-
if (typeof loadingResolver === 'function') {
|
|
89
|
-
return /*#__PURE__*/ React.lazy(()=>loadingResolver().then((module)=>({
|
|
90
|
-
default: module.default || module
|
|
91
|
-
})));
|
|
92
|
-
}
|
|
93
|
-
// 如果 loadingResolver 不是函数,使用默认加载组件
|
|
94
|
-
return getDefaultLoadingComponent();
|
|
95
|
-
}
|
|
96
|
-
// 如果 loading 为空,使用默认加载组件
|
|
97
|
-
return getDefaultLoadingComponent();
|
|
98
|
-
}
|
|
99
63
|
// 获取转换配置
|
|
100
64
|
function convertConfig(m) {
|
|
101
65
|
if (!m) {
|
|
@@ -104,7 +68,7 @@ export const transformRoutesToReactRoutes = async (routes, transformResult, defa
|
|
|
104
68
|
const { action, loader, shouldRevalidate, default: Component } = m;
|
|
105
69
|
// 如果 Component 不存在,记录警告
|
|
106
70
|
if (!Component) {
|
|
107
|
-
|
|
71
|
+
logger.warn(`路由组件未找到 default 导出: ${name}`, m);
|
|
108
72
|
}
|
|
109
73
|
return {
|
|
110
74
|
action,
|
|
@@ -113,6 +77,22 @@ export const transformRoutesToReactRoutes = async (routes, transformResult, defa
|
|
|
113
77
|
Component
|
|
114
78
|
};
|
|
115
79
|
}
|
|
80
|
+
// 获取加载组件
|
|
81
|
+
async function getLoadingComponent() {
|
|
82
|
+
if (typeof loading === 'function') {
|
|
83
|
+
return loading();
|
|
84
|
+
}
|
|
85
|
+
if (typeof loading === 'string' && loading !== '') {
|
|
86
|
+
const loadingResolver = transformResult.loadings.get(loading);
|
|
87
|
+
if (typeof loadingResolver === 'function') {
|
|
88
|
+
return loadingResolver();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (defaultRouteLoadingComponent) {
|
|
92
|
+
return defaultRouteLoadingComponent();
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
116
96
|
// 获取配置
|
|
117
97
|
async function getConfig(index = false) {
|
|
118
98
|
// 如果有layout和不是index,返回布局配置
|
|
@@ -168,20 +148,23 @@ export const transformRoutesToReactRoutes = async (routes, transformResult, defa
|
|
|
168
148
|
}
|
|
169
149
|
const reactRoute = {
|
|
170
150
|
children: [],
|
|
171
|
-
|
|
151
|
+
hydrateFallbackElement: /*#__PURE__*/ _jsx(DefaultRouteHydrateFallback, {}),
|
|
172
152
|
id: name,
|
|
173
153
|
handle: getHandle(),
|
|
174
154
|
lazy: async ()=>{
|
|
175
155
|
const ErrorBoundary = await getErrorComponent();
|
|
176
156
|
const config = await getConfig();
|
|
157
|
+
const LoadingComponent = await getLoadingComponent();
|
|
177
158
|
// 如果配置为空,确保至少返回一个空对象,避免展开 undefined
|
|
178
159
|
if (!config) {
|
|
179
160
|
return {
|
|
180
|
-
ErrorBoundary: ErrorBoundary?.default
|
|
161
|
+
ErrorBoundary: ErrorBoundary?.default,
|
|
162
|
+
HydrateFallback: LoadingComponent?.default
|
|
181
163
|
};
|
|
182
164
|
}
|
|
183
165
|
return {
|
|
184
166
|
ErrorBoundary: ErrorBoundary?.default,
|
|
167
|
+
HydrateFallback: LoadingComponent?.default,
|
|
185
168
|
...config
|
|
186
169
|
};
|
|
187
170
|
},
|
|
@@ -200,8 +183,10 @@ export const transformRoutesToReactRoutes = async (routes, transformResult, defa
|
|
|
200
183
|
index: true,
|
|
201
184
|
lazy: async ()=>{
|
|
202
185
|
const ErrorBoundary = await getErrorComponent();
|
|
186
|
+
const LoadingComponent = await getLoadingComponent();
|
|
203
187
|
return {
|
|
204
188
|
ErrorBoundary: ErrorBoundary?.default,
|
|
189
|
+
HydrateFallback: LoadingComponent?.default,
|
|
205
190
|
...await getConfig(true)
|
|
206
191
|
};
|
|
207
192
|
}
|
|
@@ -230,8 +215,10 @@ export const transformRoutesToReactRoutes = async (routes, transformResult, defa
|
|
|
230
215
|
index: true,
|
|
231
216
|
lazy: async ()=>{
|
|
232
217
|
const ErrorBoundary = await getErrorComponent();
|
|
218
|
+
const LoadingComponent = await getLoadingComponent();
|
|
233
219
|
return {
|
|
234
220
|
ErrorBoundary: ErrorBoundary?.default,
|
|
221
|
+
HydrateFallback: LoadingComponent?.default,
|
|
235
222
|
...await getConfig(true)
|
|
236
223
|
};
|
|
237
224
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/router/utils/adapters/react-router/transform.tsx"],"sourcesContent":["import type { RouteConfig } from '../../../types';\nimport React from \"react\";\nimport {\n type RouteObject,\n Navigate\n} from 'react-router-dom';\nimport type { TransformRoutesResult } from '../../transform';\nimport { RouteErrorBoundary } from './RouteErrorBoundary';\nimport { Spin } from 'antd';\nimport type { ComponentImport } from '../../../types';\n\n\nexport const transformRoutesToReactRoutes = async (\n routes: RouteConfig[], \n transformResult: TransformRoutesResult,\n defaultRouteErrorComponent?: ComponentImport,\n defaultRouteLoadingComponent?: ComponentImport\n): Promise<RouteObject[]> => {\n\n /**\n * 批量处理路由\n * @param routes 路由组\n */\n function transformRouteToReactRoutes(routes: RouteConfig[]) {\n return routes.flatMap((route: RouteConfig) => transformRouteToReactRoute(route))\n }\n\n /**\n * 处理单个路由\n * @param route 路由\n */\n function transformRouteToReactRoute(route: RouteConfig): RouteObject {\n const {\n isGroup = false,\n enableRedirection = false,\n name,\n path,\n handle,\n children,\n page,\n layout,\n loading,\n errors\n } = route;\n\n // 获取错误组件\n async function getErrorComponent() {\n // 如果 errors 是函数,直接使用\n if (typeof errors === 'function') {\n return errors();\n }\n\n const errorsMap = transformResult.errors;\n\n // 判断 errors 是否为 string 且不是空字符串\n if (typeof errors === 'string' && errors !== '') {\n // 使用 errors 作为 key 获取 transformResult.errors 的值\n const errorResolver = errorsMap.get(errors);\n\n // 如果获取不到,返回 null\n if (!errorResolver) {\n return null;\n }\n\n // 如果获取到,返回对应的值(调用动态导入函数)\n if (typeof errorResolver === 'function') {\n return errorResolver();\n }\n\n return null;\n }\n\n // 如果 errors 为空,使用配置的默认错误组件或内置的 RouteErrorBoundary 组件\n if (defaultRouteErrorComponent) {\n // 如果配置了默认错误组件,使用配置的组件\n return defaultRouteErrorComponent();\n }\n\n // 如果没有配置默认错误组件,使用内置的 RouteErrorBoundary 组件\n // 直接导入而非懒加载,因为:\n // 1. RouteErrorBoundary 是框架核心组件,体积小\n // 2. 错误边界需要快速响应,直接导入速度更快\n // 3. 作为基础设施组件,应该保证可用性\n return { default: RouteErrorBoundary };\n }\n\n // 获取默认加载组件(配置的或内置的 Spin)\n function getDefaultLoadingComponent() {\n if (defaultRouteLoadingComponent) {\n // 如果配置了默认加载组件,使用 React.lazy 包装\n // 使用懒加载是因为用户可能希望自定义组件支持代码分割\n return React.lazy(() => defaultRouteLoadingComponent().then(module => ({ default: module.default || module })));\n }\n // 如果没有配置默认加载组件,使用 antd 的 Spin 作为默认组件\n // 直接导入而非懒加载,因为:\n // 1. Spin 是 antd 的基础组件,体积小\n // 2. 加载组件需要快速显示,直接导入速度更快\n // 3. 作为基础设施组件,应该保证可用性\n return Spin;\n }\n\n // 获取加载组件\n function getLoadingComponent() {\n // 如果 loading 是函数,直接使用 React.lazy 包装\n if (typeof loading === 'function') {\n return React.lazy(() => loading().then(module => ({ default: module.default || module })));\n }\n\n const loadingsMap = transformResult.loadings;\n\n // 判断 loading 是否为 string 且不是空字符串\n if (typeof loading === 'string' && loading !== '') {\n // 使用 loading 作为 key 获取 transformResult.loadings 的值\n const loadingResolver = loadingsMap.get(loading);\n\n // 如果获取不到,使用默认加载组件\n if (!loadingResolver) {\n return getDefaultLoadingComponent();\n }\n\n // 如果获取到,使用 React.lazy 包装动态导入函数\n // loadingResolver 是一个返回 Promise 的函数,Promise resolve 后的值是组件模块\n if (typeof loadingResolver === 'function') {\n return React.lazy(() => loadingResolver().then(module => ({ default: module.default || module })));\n }\n\n // 如果 loadingResolver 不是函数,使用默认加载组件\n return getDefaultLoadingComponent();\n }\n\n // 如果 loading 为空,使用默认加载组件\n return getDefaultLoadingComponent();\n }\n\n // 获取转换配置\n function convertConfig(m: any) {\n if (!m) {\n return null;\n }\n const { action, loader, shouldRevalidate, default: Component } = m;\n\n // 如果 Component 不存在,记录警告\n if (!Component) {\n console.warn(`路由组件未找到 default 导出: ${name}`, m);\n }\n\n return {\n action, // always use action\n loader, // always use loader\n shouldRevalidate,\n Component\n };\n }\n\n // 获取配置\n async function getConfig(index: boolean = false) {\n // 如果有layout和不是index,返回布局配置\n if (layout && !index) {\n // 如果 layout 是函数,直接使用\n if (typeof layout === 'function') {\n const config = await layout();\n return convertConfig(config);\n }\n\n // 如果 layout 是字符串,从 Map 中获取\n if (typeof layout === 'string') {\n const layoutResolver = transformResult.layouts.get(layout);\n if (!layoutResolver) {\n throw new Error(`未找到名为 ${layout} 的布局组件`);\n }\n const config = await layoutResolver();\n return convertConfig(config);\n }\n }\n\n let pageName = name;\n\n // 如果是notFound则转成404\n if (pageName === 'notFound') {\n pageName = '404'\n }\n\n if (page && (!children?.length || index)) {\n // 如果 page 是函数,直接使用\n if (typeof page === 'function') {\n const config = await page();\n return convertConfig(config);\n }\n\n // 如果 page 是字符串,从 Map 中获取\n if (typeof page === 'string') {\n const viewResolver = transformResult.pages.get(page);\n if (!viewResolver) {\n throw new Error(`未找到名为 ${page} 的页面组件`);\n }\n const config = await viewResolver();\n return convertConfig(config);\n }\n }\n\n return null;\n }\n\n // 获取处理信息,即额外的配置信息\n function getHandle(index: boolean = false) {\n if ((layout || isGroup) && !index) {\n return null\n }\n return {\n ...handle,\n name,\n path\n }\n }\n\n\n const reactRoute: RouteObject = {\n children: [],\n HydrateFallback: getLoadingComponent(),\n id: name,\n handle: getHandle(),\n lazy: async () => {\n const ErrorBoundary = await getErrorComponent();\n const config = await getConfig();\n\n // 如果配置为空,确保至少返回一个空对象,避免展开 undefined\n if (!config) {\n return {\n ErrorBoundary: ErrorBoundary?.default,\n };\n }\n\n return {\n ErrorBoundary: ErrorBoundary?.default,\n ...config\n };\n },\n path\n };\n\n // 处理子路由\n if (children?.length) {\n reactRoute.children = children.flatMap(child => transformRouteToReactRoute(child)).sort((a, b) => {\n const orderA = a.handle?.order ?? 99;\n const orderB = b.handle?.order ?? 99;\n return orderA - orderB;\n });\n\n if (page && !isGroup) {\n reactRoute.children.unshift({\n handle: getHandle(true),\n index: true,\n lazy: async () => {\n const ErrorBoundary = await getErrorComponent();\n return {\n ErrorBoundary: ErrorBoundary?.default,\n ...(await getConfig(true))\n };\n }\n });\n }\n\n if (enableRedirection && isGroup) {\n const [firstChild] = reactRoute.children;\n if (firstChild?.path) {\n reactRoute.children.unshift({\n index: true,\n handle: getHandle(true),\n element: <Navigate to={firstChild.path as string} replace />\n });\n }\n }\n\n }\n // 若存在 layout 且没有子路由,但同时声明了 page,则自动生成 index 子路由以渲染页面\n // 场景:/test 使用自定义 layout,且没有 children 时仍应渲染 page\n if ((!children || children.length === 0) && layout && page && !isGroup) {\n reactRoute.children = [{\n handle: getHandle(true),\n index: true,\n lazy: async () => {\n const ErrorBoundary = await getErrorComponent();\n return {\n ErrorBoundary: ErrorBoundary?.default,\n ...(await getConfig(true))\n };\n }\n }];\n }\n\n return reactRoute;\n }\n\n return transformRouteToReactRoutes(routes);\n}\n\n\n\n\n"],"names":["React","Navigate","RouteErrorBoundary","Spin","transformRoutesToReactRoutes","routes","transformResult","defaultRouteErrorComponent","defaultRouteLoadingComponent","transformRouteToReactRoutes","flatMap","route","transformRouteToReactRoute","isGroup","enableRedirection","name","path","handle","children","page","layout","loading","errors","getErrorComponent","errorsMap","errorResolver","get","default","getDefaultLoadingComponent","lazy","then","module","getLoadingComponent","loadingsMap","loadings","loadingResolver","convertConfig","m","action","loader","shouldRevalidate","Component","console","warn","getConfig","index","config","layoutResolver","layouts","Error","pageName","length","viewResolver","pages","getHandle","reactRoute","HydrateFallback","id","ErrorBoundary","child","sort","a","b","orderA","order","orderB","unshift","firstChild","element","to","replace"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/router/utils/adapters/react-router/transform.tsx"],"sourcesContent":["import type { RouteConfig } from '../../../types';\nimport {\n type RouteObject,\n Navigate\n} from 'react-router-dom';\nimport type { TransformRoutesResult } from '../../transform';\nimport { RouteErrorBoundary } from './RouteErrorBoundary';\nimport type { ComponentImport } from '../../../types';\nimport { logger } from '../../../../../utils';\n\nfunction DefaultRouteHydrateFallback() {\n return (\n <div style={{ padding: 16, textAlign: 'center', color: '#5f6c7b' }}>\n Loading...\n </div>\n );\n}\n\nexport const transformRoutesToReactRoutes = async (\n routes: RouteConfig[], \n transformResult: TransformRoutesResult,\n defaultRouteErrorComponent?: ComponentImport,\n defaultRouteLoadingComponent?: ComponentImport,\n): Promise<RouteObject[]> => {\n\n /**\n * 批量处理路由\n * @param routes 路由组\n */\n function transformRouteToReactRoutes(routes: RouteConfig[]) {\n return routes.flatMap((route: RouteConfig) => transformRouteToReactRoute(route))\n }\n\n /**\n * 处理单个路由\n * @param route 路由\n */\n function transformRouteToReactRoute(route: RouteConfig): RouteObject {\n const {\n isGroup = false,\n enableRedirection = false,\n name,\n path,\n handle,\n children,\n page,\n layout,\n error,\n errors,\n loading,\n } = route;\n const routeError = error ?? errors;\n\n // 获取错误组件\n async function getErrorComponent() {\n // 如果 error/errors 是函数,直接使用\n if (typeof routeError === 'function') {\n return routeError();\n }\n\n const errorsMap = transformResult.errors;\n\n // 判断 error/errors 是否为 string 且不是空字符串\n if (typeof routeError === 'string' && routeError !== '') {\n // 使用 routeError 作为 key 获取 transformResult.errors 的值\n const errorResolver = errorsMap.get(routeError);\n\n // 如果获取不到,返回 null\n if (!errorResolver) {\n return null;\n }\n\n // 如果获取到,返回对应的值(调用动态导入函数)\n if (typeof errorResolver === 'function') {\n return errorResolver();\n }\n\n return null;\n }\n\n // 如果 errors 为空,使用配置的默认错误组件或内置的 RouteErrorBoundary 组件\n if (defaultRouteErrorComponent) {\n // 如果配置了默认错误组件,使用配置的组件\n return defaultRouteErrorComponent();\n }\n\n // 如果没有配置默认错误组件,使用内置的 RouteErrorBoundary 组件\n // 直接导入而非懒加载,因为:\n // 1. RouteErrorBoundary 是框架核心组件,体积小\n // 2. 错误边界需要快速响应,直接导入速度更快\n // 3. 作为基础设施组件,应该保证可用性\n return { default: RouteErrorBoundary };\n }\n\n // 获取转换配置\n function convertConfig(m: any) {\n if (!m) {\n return null;\n }\n const { action, loader, shouldRevalidate, default: Component } = m;\n\n // 如果 Component 不存在,记录警告\n if (!Component) {\n logger.warn(`路由组件未找到 default 导出: ${name}`, m);\n }\n\n return {\n action, // always use action\n loader, // always use loader\n shouldRevalidate,\n Component\n };\n }\n\n // 获取加载组件\n async function getLoadingComponent() {\n if (typeof loading === 'function') {\n return loading();\n }\n\n if (typeof loading === 'string' && loading !== '') {\n const loadingResolver = transformResult.loadings.get(loading);\n if (typeof loadingResolver === 'function') {\n return loadingResolver();\n }\n }\n\n if (defaultRouteLoadingComponent) {\n return defaultRouteLoadingComponent();\n }\n\n return null;\n }\n\n // 获取配置\n async function getConfig(index: boolean = false) {\n // 如果有layout和不是index,返回布局配置\n if (layout && !index) {\n // 如果 layout 是函数,直接使用\n if (typeof layout === 'function') {\n const config = await layout();\n return convertConfig(config);\n }\n\n // 如果 layout 是字符串,从 Map 中获取\n if (typeof layout === 'string') {\n const layoutResolver = transformResult.layouts.get(layout);\n if (!layoutResolver) {\n throw new Error(`未找到名为 ${layout} 的布局组件`);\n }\n const config = await layoutResolver();\n return convertConfig(config);\n }\n }\n\n let pageName = name;\n\n // 如果是notFound则转成404\n if (pageName === 'notFound') {\n pageName = '404'\n }\n\n if (page && (!children?.length || index)) {\n // 如果 page 是函数,直接使用\n if (typeof page === 'function') {\n const config = await page();\n return convertConfig(config);\n }\n\n // 如果 page 是字符串,从 Map 中获取\n if (typeof page === 'string') {\n const viewResolver = transformResult.pages.get(page);\n if (!viewResolver) {\n throw new Error(`未找到名为 ${page} 的页面组件`);\n }\n const config = await viewResolver();\n return convertConfig(config);\n }\n }\n\n return null;\n }\n\n // 获取处理信息,即额外的配置信息\n function getHandle(index: boolean = false) {\n if ((layout || isGroup) && !index) {\n return null\n }\n return {\n ...handle,\n name,\n path\n }\n }\n\n\n const reactRoute: RouteObject = {\n children: [],\n hydrateFallbackElement: <DefaultRouteHydrateFallback />,\n id: name,\n handle: getHandle(),\n lazy: async () => {\n const ErrorBoundary = await getErrorComponent();\n const config = await getConfig();\n const LoadingComponent = await getLoadingComponent();\n\n // 如果配置为空,确保至少返回一个空对象,避免展开 undefined\n if (!config) {\n return {\n ErrorBoundary: ErrorBoundary?.default,\n HydrateFallback: LoadingComponent?.default,\n };\n }\n\n return {\n ErrorBoundary: ErrorBoundary?.default,\n HydrateFallback: LoadingComponent?.default,\n ...config\n };\n },\n path\n };\n\n // 处理子路由\n if (children?.length) {\n reactRoute.children = children.flatMap(child => transformRouteToReactRoute(child)).sort((a, b) => {\n const orderA = a.handle?.order ?? 99;\n const orderB = b.handle?.order ?? 99;\n return orderA - orderB;\n });\n\n if (page && !isGroup) {\n reactRoute.children.unshift({\n handle: getHandle(true),\n index: true,\n lazy: async () => {\n const ErrorBoundary = await getErrorComponent();\n const LoadingComponent = await getLoadingComponent();\n return {\n ErrorBoundary: ErrorBoundary?.default,\n HydrateFallback: LoadingComponent?.default,\n ...(await getConfig(true))\n };\n }\n });\n }\n\n if (enableRedirection && isGroup) {\n const [firstChild] = reactRoute.children;\n if (firstChild?.path) {\n reactRoute.children.unshift({\n index: true,\n handle: getHandle(true),\n element: <Navigate to={firstChild.path as string} replace />\n });\n }\n }\n\n }\n // 若存在 layout 且没有子路由,但同时声明了 page,则自动生成 index 子路由以渲染页面\n // 场景:/test 使用自定义 layout,且没有 children 时仍应渲染 page\n if ((!children || children.length === 0) && layout && page && !isGroup) {\n reactRoute.children = [{\n handle: getHandle(true),\n index: true,\n lazy: async () => {\n const ErrorBoundary = await getErrorComponent();\n const LoadingComponent = await getLoadingComponent();\n return {\n ErrorBoundary: ErrorBoundary?.default,\n HydrateFallback: LoadingComponent?.default,\n ...(await getConfig(true))\n };\n }\n }];\n }\n\n return reactRoute;\n }\n\n return transformRouteToReactRoutes(routes);\n}\n"],"names":["Navigate","RouteErrorBoundary","logger","DefaultRouteHydrateFallback","div","style","padding","textAlign","color","transformRoutesToReactRoutes","routes","transformResult","defaultRouteErrorComponent","defaultRouteLoadingComponent","transformRouteToReactRoutes","flatMap","route","transformRouteToReactRoute","isGroup","enableRedirection","name","path","handle","children","page","layout","error","errors","loading","routeError","getErrorComponent","errorsMap","errorResolver","get","default","convertConfig","m","action","loader","shouldRevalidate","Component","warn","getLoadingComponent","loadingResolver","loadings","getConfig","index","config","layoutResolver","layouts","Error","pageName","length","viewResolver","pages","getHandle","reactRoute","hydrateFallbackElement","id","lazy","ErrorBoundary","LoadingComponent","HydrateFallback","child","sort","a","b","orderA","order","orderB","unshift","firstChild","element","to","replace"],"mappings":"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"}
|
|
@@ -122,7 +122,12 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
122
122
|
*/ const DEFAULT_OPTIONS = {
|
|
123
123
|
pathValidation: {
|
|
124
124
|
enablePathValidation: true,
|
|
125
|
-
|
|
125
|
+
// 默认仅允许常见本地模块路径,生产环境建议进一步收紧。
|
|
126
|
+
allowedPathPrefixes: [
|
|
127
|
+
'@/',
|
|
128
|
+
'./',
|
|
129
|
+
'../'
|
|
130
|
+
],
|
|
126
131
|
maxPathLength: 500,
|
|
127
132
|
allowAbsolutePaths: false
|
|
128
133
|
},
|
|
@@ -184,62 +189,62 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
184
189
|
*/ function simpleHash(str) {
|
|
185
190
|
return optimizedHash(str);
|
|
186
191
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
192
|
+
function serializeComponentRef(value) {
|
|
193
|
+
if (typeof value === 'string') {
|
|
194
|
+
return {
|
|
195
|
+
str: value
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
if (typeof value === 'function') {
|
|
199
|
+
// 函数引用无法稳定序列化源码,使用名称和长度参与哈希,避免同名不同体完全碰撞。
|
|
200
|
+
const fnText = String(value);
|
|
201
|
+
return {
|
|
202
|
+
fn: `${value.name || 'anonymous'}:${fnText.length}`
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
return {};
|
|
206
|
+
}
|
|
207
|
+
function serializeRouteConfig(route) {
|
|
208
|
+
const page = serializeComponentRef(route.page);
|
|
209
|
+
const layout = serializeComponentRef(route.layout);
|
|
210
|
+
const routeError = serializeComponentRef(route.error ?? route.errors);
|
|
211
|
+
const loading = serializeComponentRef(route.loading);
|
|
212
|
+
return {
|
|
213
|
+
name: route.name,
|
|
214
|
+
path: route.path,
|
|
215
|
+
page: page.str,
|
|
216
|
+
pageFn: page.fn,
|
|
217
|
+
layout: layout.str,
|
|
218
|
+
layoutFn: layout.fn,
|
|
219
|
+
error: routeError.str,
|
|
220
|
+
errorFn: routeError.fn,
|
|
221
|
+
loading: loading.str,
|
|
222
|
+
loadingFn: loading.fn,
|
|
223
|
+
isGroup: route.isGroup,
|
|
224
|
+
enableRedirection: route.enableRedirection,
|
|
225
|
+
handle: route.handle ? {
|
|
226
|
+
title: route.handle.title,
|
|
227
|
+
order: route.handle.order,
|
|
228
|
+
needLogin: route.handle.needLogin,
|
|
229
|
+
roles: Array.isArray(route.handle.roles) ? [
|
|
230
|
+
...route.handle.roles
|
|
231
|
+
] : undefined
|
|
232
|
+
} : undefined,
|
|
233
|
+
children: route.children?.map((child)=>serializeRouteConfig(child))
|
|
234
|
+
};
|
|
235
|
+
}
|
|
190
236
|
/**
|
|
191
237
|
* 生成配置哈希(用于缓存键)
|
|
192
238
|
* 优化:缓存序列化结果,避免重复序列化
|
|
193
239
|
*/ function generateConfigHash(routes) {
|
|
194
240
|
try {
|
|
195
|
-
// 快速检查:如果路由数量为 0,直接返回
|
|
196
241
|
if (routes.length === 0) {
|
|
197
242
|
return 'empty';
|
|
198
243
|
}
|
|
199
|
-
|
|
200
|
-
const
|
|
201
|
-
// 检查序列化缓存
|
|
202
|
-
if (configStringCache.has(quickKey)) {
|
|
203
|
-
const cachedStr = configStringCache.get(quickKey);
|
|
204
|
-
// 验证缓存是否仍然有效(简单检查)
|
|
205
|
-
const currentStr = JSON.stringify(routes, null, 0).substring(0, 100);
|
|
206
|
-
if (cachedStr.startsWith(currentStr.substring(0, 50))) {
|
|
207
|
-
return simpleHash(cachedStr);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
// 使用 JSON.stringify 生成配置的字符串表示
|
|
211
|
-
// 只包含影响转换结果的字段
|
|
212
|
-
const configStr = JSON.stringify(routes, (key, value)=>{
|
|
213
|
-
// 只序列化相关字段
|
|
214
|
-
if ([
|
|
215
|
-
'name',
|
|
216
|
-
'path',
|
|
217
|
-
'page',
|
|
218
|
-
'layout',
|
|
219
|
-
'errors',
|
|
220
|
-
'loading',
|
|
221
|
-
'isGroup',
|
|
222
|
-
'enableRedirection',
|
|
223
|
-
'children'
|
|
224
|
-
].includes(key)) {
|
|
225
|
-
return value;
|
|
226
|
-
}
|
|
227
|
-
if (key === 'handle' && value && typeof value === 'object') {
|
|
228
|
-
// 只序列化 handle 的基本字段
|
|
229
|
-
return {
|
|
230
|
-
title: value.title,
|
|
231
|
-
order: value.order
|
|
232
|
-
};
|
|
233
|
-
}
|
|
234
|
-
return undefined;
|
|
235
|
-
});
|
|
236
|
-
// 缓存序列化结果(限制缓存大小)
|
|
237
|
-
if (configStringCache.size < 20) {
|
|
238
|
-
configStringCache.set(quickKey, configStr);
|
|
239
|
-
}
|
|
244
|
+
const serializedRoutes = routes.map((route)=>serializeRouteConfig(route));
|
|
245
|
+
const configStr = JSON.stringify(serializedRoutes);
|
|
240
246
|
return simpleHash(configStr);
|
|
241
247
|
} catch {
|
|
242
|
-
// 如果序列化失败,返回空字符串(不使用缓存)
|
|
243
248
|
return '';
|
|
244
249
|
}
|
|
245
250
|
}
|
|
@@ -252,6 +257,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
252
257
|
const ABSOLUTE_PATH_REGEX = /^\/|^[A-Za-z]:\\/;
|
|
253
258
|
const CONTROL_CHAR_REGEX = /[\x00-\x1f\x7f]/;
|
|
254
259
|
const NULL_BYTE_REGEX = /%00|\\0|\x00/;
|
|
260
|
+
const URL_SCHEME_REGEX = /^[A-Za-z][A-Za-z0-9+.-]*:/;
|
|
255
261
|
// 保留供未来使用(命令注入检测)
|
|
256
262
|
// const COMMAND_INJECTION_REGEX = /[;|&$`]/;
|
|
257
263
|
// const ALLOWED_CHARS_REGEX = /^[a-zA-Z0-9\/\-_.@]+$/;
|
|
@@ -309,6 +315,13 @@ const NULL_BYTE_REGEX = /%00|\\0|\x00/;
|
|
|
309
315
|
// : '路径验证失败',
|
|
310
316
|
// };
|
|
311
317
|
// }
|
|
318
|
+
// 禁止 URL scheme 导入(如 http:, https:, data:, javascript:)
|
|
319
|
+
if (URL_SCHEME_REGEX.test(path)) {
|
|
320
|
+
return {
|
|
321
|
+
valid: false,
|
|
322
|
+
error: process.env.NODE_ENV === 'development' ? '不允许使用带协议的路径' : '路径验证失败'
|
|
323
|
+
};
|
|
324
|
+
}
|
|
312
325
|
// 检查绝对路径(使用预编译正则)
|
|
313
326
|
if (!config.allowAbsolutePaths && ABSOLUTE_PATH_REGEX.test(path)) {
|
|
314
327
|
return {
|
|
@@ -316,6 +329,13 @@ const NULL_BYTE_REGEX = /%00|\\0|\x00/;
|
|
|
316
329
|
error: process.env.NODE_ENV === 'development' ? '不允许使用绝对路径' : '路径验证失败'
|
|
317
330
|
};
|
|
318
331
|
}
|
|
332
|
+
// 默认仅允许相对路径和别名路径,避免把第三方包名作为动态入口。
|
|
333
|
+
if (!path.startsWith('@/') && !path.startsWith('./') && !path.startsWith('../')) {
|
|
334
|
+
return {
|
|
335
|
+
valid: false,
|
|
336
|
+
error: process.env.NODE_ENV === 'development' ? '仅允许使用 @/、./、../ 开头的模块路径' : '路径验证失败'
|
|
337
|
+
};
|
|
338
|
+
}
|
|
319
339
|
// 检查路径前缀白名单(优化:使用 Set 提高查找速度)
|
|
320
340
|
if (config.allowedPathPrefixes.length > 0) {
|
|
321
341
|
const prefixSet = new Set(config.allowedPathPrefixes);
|
|
@@ -390,7 +410,7 @@ const NULL_BYTE_REGEX = /%00|\\0|\x00/;
|
|
|
390
410
|
*/ function createDynamicImport(path) {
|
|
391
411
|
// 使用类型断言,因为 TypeScript 的 import() 需要静态字符串
|
|
392
412
|
// 但在运行时,我们可以使用动态路径
|
|
393
|
-
return ()=>Promise.resolve(path).then((p)=>/*#__PURE__*/ _interop_require_wildcard(require(p)));
|
|
413
|
+
return ()=>Promise.resolve(/* @vite-ignore */ path).then((p)=>/*#__PURE__*/ _interop_require_wildcard(require(p)));
|
|
394
414
|
}
|
|
395
415
|
/**
|
|
396
416
|
* 提取并验证组件路径到 Map 中
|
|
@@ -537,9 +557,10 @@ const stackNodePool = new StackNodePool();
|
|
|
537
557
|
map: result.layouts
|
|
538
558
|
});
|
|
539
559
|
}
|
|
540
|
-
|
|
560
|
+
const routeError = route.error ?? route.errors;
|
|
561
|
+
if (routeError && typeof routeError === 'string') {
|
|
541
562
|
pathsToProcess.push({
|
|
542
|
-
path:
|
|
563
|
+
path: routeError,
|
|
543
564
|
map: result.errors
|
|
544
565
|
});
|
|
545
566
|
}
|
|
@@ -584,7 +605,7 @@ const stackNodePool = new StackNodePool();
|
|
|
584
605
|
// 提取组件路径到 Map 中(同时进行验证)
|
|
585
606
|
extractAndValidatePath(route.page, result.pages, config, options);
|
|
586
607
|
extractAndValidatePath(route.layout, result.layouts, config, options);
|
|
587
|
-
extractAndValidatePath(route.errors, result.errors, config, options);
|
|
608
|
+
extractAndValidatePath(route.error ?? route.errors, result.errors, config, options);
|
|
588
609
|
extractAndValidatePath(route.loading, result.loadings, config, options);
|
|
589
610
|
// 处理子路由
|
|
590
611
|
if (route.children && Array.isArray(route.children) && route.children.length > 0) {
|
|
@@ -708,26 +729,14 @@ async function transformRoutes(routes, options = {}) {
|
|
|
708
729
|
if (mergedOptions.performance.enableCache && transformCache) {
|
|
709
730
|
const configHash = generateConfigHash(routesArray);
|
|
710
731
|
if (configHash) {
|
|
711
|
-
//
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
cachedResult.errors = new Map(result.errors);
|
|
720
|
-
cachedResult.loadings = new Map(result.loadings);
|
|
721
|
-
} else {
|
|
722
|
-
// 回退到手动深拷贝
|
|
723
|
-
cachedResult = {
|
|
724
|
-
pages: new Map(result.pages),
|
|
725
|
-
layouts: new Map(result.layouts),
|
|
726
|
-
errors: new Map(result.errors),
|
|
727
|
-
loadings: new Map(result.loadings),
|
|
728
|
-
routes: JSON.parse(JSON.stringify(result.routes))
|
|
729
|
-
};
|
|
730
|
-
}
|
|
732
|
+
// 注意:Map 中包含函数值,structuredClone 会失败;统一使用手动克隆。
|
|
733
|
+
const cachedResult = {
|
|
734
|
+
pages: new Map(result.pages),
|
|
735
|
+
layouts: new Map(result.layouts),
|
|
736
|
+
errors: new Map(result.errors),
|
|
737
|
+
loadings: new Map(result.loadings),
|
|
738
|
+
routes: JSON.parse(JSON.stringify(result.routes))
|
|
739
|
+
};
|
|
731
740
|
transformCache.set(configHash, {
|
|
732
741
|
result: cachedResult,
|
|
733
742
|
timestamp: Date.now(),
|