@4399ywkf/core 5.0.18 → 5.0.20

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.
@@ -1,10 +1,64 @@
1
- import { b as AppContextValue, A as AppConfig, P as ProviderConfig, M as MicroAppConfig } from '../types-BztKUufh.js';
2
- export { a as AntdConfig, L as LifecycleHooks, c as RequestConfig, R as Result } from '../types-BztKUufh.js';
1
+ import { A as AppConfig, M as MicroAppConfig, b as AppContextValue, P as ProviderConfig } from '../types-DbUq-VY8.js';
2
+ export { a as AntdConfig, L as LifecycleHooks, R as RequestConfig, c as Result } from '../types-DbUq-VY8.js';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import * as react from 'react';
5
5
  import { ReactNode, Component, ErrorInfo, ComponentType } from 'react';
6
6
  import 'react-router';
7
7
 
8
+ /**
9
+ * 启动应用
10
+ */
11
+ declare function bootstrap(config: AppConfig): Promise<void>;
12
+ /**
13
+ * 卸载应用
14
+ */
15
+ declare function unmount(): void;
16
+ /**
17
+ * 创建微前端应用入口
18
+ *
19
+ * 用于 qiankun/garfish 等微前端框架
20
+ */
21
+ declare function createMicroApp(getConfig: (props?: MicroAppConfig) => AppConfig): {
22
+ /**
23
+ * 微前端 bootstrap 生命周期
24
+ */
25
+ bootstrap(): Promise<void>;
26
+ /**
27
+ * 微前端 mount 生命周期
28
+ */
29
+ mount(props?: MicroAppConfig): Promise<void>;
30
+ /**
31
+ * 微前端 unmount 生命周期
32
+ */
33
+ unmount(props?: MicroAppConfig): Promise<void>;
34
+ /**
35
+ * 微前端 update 生命周期(可选)
36
+ */
37
+ update(props?: MicroAppConfig): Promise<void>;
38
+ };
39
+ /**
40
+ * Garfish 子应用 provider
41
+ *
42
+ * Garfish 要求子应用导出 provider 函数,接收 { dom, basename, props },
43
+ * 返回 { render, destroy } 对象。
44
+ */
45
+ declare function createGarfishProvider(getConfig: (overrides?: Partial<AppConfig>) => AppConfig): (providerContext: {
46
+ dom: Element;
47
+ basename: string;
48
+ props?: Record<string, unknown>;
49
+ }) => {
50
+ render(): void;
51
+ destroy(): void;
52
+ };
53
+ /**
54
+ * 判断是否在微前端环境中运行
55
+ */
56
+ declare function isMicroAppEnv(): boolean;
57
+ /**
58
+ * 获取微前端公共路径
59
+ */
60
+ declare function getMicroAppPublicPath(): string;
61
+
8
62
  /**
9
63
  * 应用上下文
10
64
  */
@@ -16,7 +70,7 @@ interface AppContextProviderProps {
16
70
  value: Partial<AppContextValue>;
17
71
  children: ReactNode;
18
72
  }
19
- declare function AppContextProvider({ value, children, }: AppContextProviderProps): react_jsx_runtime.JSX.Element;
73
+ declare function AppContextProvider({ value, children }: AppContextProviderProps): react_jsx_runtime.JSX.Element;
20
74
  /**
21
75
  * 获取应用上下文的 Hook
22
76
  */
@@ -77,58 +131,4 @@ declare function createProvider<P extends Record<string, unknown>>(component: Co
77
131
  children: ReactNode;
78
132
  }>, props?: Omit<P, "children">, order?: number): ProviderConfig;
79
133
 
80
- /**
81
- * 启动应用
82
- */
83
- declare function bootstrap(config: AppConfig): Promise<void>;
84
- /**
85
- * 卸载应用
86
- */
87
- declare function unmount(): void;
88
- /**
89
- * 创建微前端应用入口
90
- *
91
- * 用于 qiankun/garfish 等微前端框架
92
- */
93
- declare function createMicroApp(getConfig: (props?: MicroAppConfig) => AppConfig): {
94
- /**
95
- * 微前端 bootstrap 生命周期
96
- */
97
- bootstrap(): Promise<void>;
98
- /**
99
- * 微前端 mount 生命周期
100
- */
101
- mount(props?: MicroAppConfig): Promise<void>;
102
- /**
103
- * 微前端 unmount 生命周期
104
- */
105
- unmount(props?: MicroAppConfig): Promise<void>;
106
- /**
107
- * 微前端 update 生命周期(可选)
108
- */
109
- update(props?: MicroAppConfig): Promise<void>;
110
- };
111
- /**
112
- * Garfish 子应用 provider
113
- *
114
- * Garfish 要求子应用导出 provider 函数,接收 { dom, basename, props },
115
- * 返回 { render, destroy } 对象。
116
- */
117
- declare function createGarfishProvider(getConfig: (overrides?: Partial<AppConfig>) => AppConfig): (providerContext: {
118
- dom: Element;
119
- basename: string;
120
- props?: Record<string, unknown>;
121
- }) => {
122
- render(): void;
123
- destroy(): void;
124
- };
125
- /**
126
- * 判断是否在微前端环境中运行
127
- */
128
- declare function isMicroAppEnv(): boolean;
129
- /**
130
- * 获取微前端公共路径
131
- */
132
- declare function getMicroAppPublicPath(): string;
133
-
134
134
  export { AppConfig, AppContext, AppContextProvider, AppContextValue, ErrorBoundary, type ErrorBoundaryProps, MicroAppConfig, ProviderConfig, RootProvider, type RootProviderProps, bootstrap, createGarfishProvider, createMicroApp, createProvider, getMicroAppPublicPath, isMicroAppEnv, unmount, useApp, useAppName, useBasename, useEnv, useIsDev };
@@ -1,3 +1,12 @@
1
+ // src/runtime/bootstrap.tsx
2
+ import { createRoot } from "react-dom/client";
3
+
4
+ // src/runtime/providers.tsx
5
+ import { ConfigProvider } from "antd";
6
+ import zhCN from "antd/locale/zh_CN.js";
7
+ import { StrictMode, Suspense } from "react";
8
+ import { RouterProvider } from "react-router";
9
+
1
10
  // src/runtime/context.tsx
2
11
  import { createContext, useContext } from "react";
3
12
  import { jsx } from "react/jsx-runtime";
@@ -8,10 +17,7 @@ var defaultContextValue = {
8
17
  env: {}
9
18
  };
10
19
  var AppContext = createContext(defaultContextValue);
11
- function AppContextProvider({
12
- value,
13
- children
14
- }) {
20
+ function AppContextProvider({ value, children }) {
15
21
  const contextValue = {
16
22
  ...defaultContextValue,
17
23
  ...value,
@@ -175,13 +181,6 @@ function DefaultErrorFallback({ error, onReset }) {
175
181
  }
176
182
 
177
183
  // src/runtime/providers.tsx
178
- import {
179
- StrictMode,
180
- Suspense
181
- } from "react";
182
- import { RouterProvider } from "react-router";
183
- import { ConfigProvider } from "antd";
184
- import zhCN from "antd/locale/zh_CN.js";
185
184
  import { jsx as jsx3 } from "react/jsx-runtime";
186
185
  function DefaultLoading() {
187
186
  return /* @__PURE__ */ jsx3(
@@ -200,9 +199,7 @@ function DefaultLoading() {
200
199
  );
201
200
  }
202
201
  function composeProviders(providers) {
203
- const sortedProviders = [...providers].sort(
204
- (a, b) => (a.order ?? 100) - (b.order ?? 100)
205
- );
202
+ const sortedProviders = [...providers].sort((a, b) => (a.order ?? 100) - (b.order ?? 100));
206
203
  return function ComposedProviders({ children }) {
207
204
  return sortedProviders.reduceRight((acc, { component: Provider, props }) => {
208
205
  return /* @__PURE__ */ jsx3(Provider, { ...props, children: acc });
@@ -264,7 +261,6 @@ function createProvider(component, props, order) {
264
261
  }
265
262
 
266
263
  // src/runtime/bootstrap.tsx
267
- import { createRoot } from "react-dom/client";
268
264
  import { jsx as jsx4 } from "react/jsx-runtime";
269
265
  var root = null;
270
266
  async function resolveAppConfig(config) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/runtime/context.tsx","../../src/runtime/error-boundary.tsx","../../src/runtime/providers.tsx","../../src/runtime/bootstrap.tsx"],"sourcesContent":["import { createContext, useContext, type ReactNode } from \"react\";\nimport type { AppContextValue } from \"./types.js\";\n\n/**\n * 默认上下文值\n */\nconst defaultContextValue: AppContextValue = {\n appName: \"app\",\n basename: \"/\",\n isDev: process.env.NODE_ENV === \"development\",\n env: {},\n};\n\n/**\n * 应用上下文\n */\nexport const AppContext = createContext<AppContextValue>(defaultContextValue);\n\n/**\n * 应用上下文 Provider\n */\nexport interface AppContextProviderProps {\n value: Partial<AppContextValue>;\n children: ReactNode;\n}\n\nexport function AppContextProvider({\n value,\n children,\n}: AppContextProviderProps) {\n const contextValue: AppContextValue = {\n ...defaultContextValue,\n ...value,\n env: {\n ...defaultContextValue.env,\n ...value.env,\n },\n };\n\n return (\n <AppContext.Provider value={contextValue}>{children}</AppContext.Provider>\n );\n}\n\n/**\n * 获取应用上下文的 Hook\n */\nexport function useApp(): AppContextValue {\n const context = useContext(AppContext);\n\n if (!context) {\n throw new Error(\"useApp must be used within AppContextProvider\");\n }\n\n return context;\n}\n\n/**\n * 获取应用名称\n */\nexport function useAppName(): string {\n return useApp().appName;\n}\n\n/**\n * 获取路由 basename\n */\nexport function useBasename(): string {\n return useApp().basename;\n}\n\n/**\n * 获取环境变量\n */\nexport function useEnv(): Record<string, string | undefined> {\n return useApp().env;\n}\n\n/**\n * 判断是否开发环境\n */\nexport function useIsDev(): boolean {\n return useApp().isDev;\n}\n","import { Component, type ReactNode, type ErrorInfo } from \"react\";\n\nexport interface ErrorBoundaryProps {\n /** 子组件 */\n children: ReactNode;\n /** 错误回退 UI */\n fallback?: ReactNode | ((error: Error, reset: () => void) => ReactNode);\n /** 错误回调 */\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * 错误边界组件\n */\nexport class ErrorBoundary extends Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n console.error(\"[ErrorBoundary] Caught error:\", error, errorInfo);\n this.props.onError?.(error, errorInfo);\n }\n\n reset = (): void => {\n this.setState({ hasError: false, error: null });\n };\n\n render(): ReactNode {\n const { hasError, error } = this.state;\n const { children, fallback } = this.props;\n\n if (hasError && error) {\n if (typeof fallback === \"function\") {\n return fallback(error, this.reset);\n }\n\n if (fallback) {\n return fallback;\n }\n\n return <DefaultErrorFallback error={error} onReset={this.reset} />;\n }\n\n return children;\n }\n}\n\n/**\n * 默认错误回退 UI\n */\ninterface DefaultErrorFallbackProps {\n error: Error;\n onReset: () => void;\n}\n\nfunction DefaultErrorFallback({ error, onReset }: DefaultErrorFallbackProps) {\n const isDev = process.env.NODE_ENV === \"development\";\n\n return (\n <div\n style={{\n padding: 24,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n minHeight: \"100vh\",\n backgroundColor: \"#f5f5f5\",\n }}\n >\n <div\n style={{\n maxWidth: 600,\n padding: 32,\n backgroundColor: \"#fff\",\n borderRadius: 8,\n boxShadow: \"0 2px 8px rgba(0,0,0,0.1)\",\n }}\n >\n <h1 style={{ color: \"#ff4d4f\", marginBottom: 16 }}>页面出错了</h1>\n <p style={{ color: \"#666\", marginBottom: 16 }}>\n 抱歉,页面遇到了一些问题。请尝试刷新页面或联系管理员。\n </p>\n\n {isDev && (\n <details\n style={{\n marginBottom: 16,\n padding: 12,\n backgroundColor: \"#fff2f0\",\n borderRadius: 4,\n border: \"1px solid #ffccc7\",\n }}\n >\n <summary style={{ cursor: \"pointer\", fontWeight: \"bold\" }}>\n 错误详情(仅开发环境可见)\n </summary>\n <pre\n style={{\n marginTop: 8,\n padding: 8,\n backgroundColor: \"#fff\",\n borderRadius: 4,\n overflow: \"auto\",\n fontSize: 12,\n }}\n >\n {error.message}\n {\"\\n\\n\"}\n {error.stack}\n </pre>\n </details>\n )}\n\n <div style={{ display: \"flex\", gap: 8 }}>\n <button\n onClick={onReset}\n style={{\n padding: \"8px 16px\",\n backgroundColor: \"#1890ff\",\n color: \"#fff\",\n border: \"none\",\n borderRadius: 4,\n cursor: \"pointer\",\n }}\n >\n 重试\n </button>\n <button\n onClick={() => window.location.reload()}\n style={{\n padding: \"8px 16px\",\n backgroundColor: \"#fff\",\n color: \"#666\",\n border: \"1px solid #d9d9d9\",\n borderRadius: 4,\n cursor: \"pointer\",\n }}\n >\n 刷新页面\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import {\n type ReactNode,\n type ComponentType,\n StrictMode,\n Suspense,\n} from \"react\";\nimport { RouterProvider } from \"react-router\";\nimport { ConfigProvider } from \"antd\";\nimport zhCN from \"antd/locale/zh_CN.js\";\nimport { AppContextProvider } from \"./context.js\";\nimport { ErrorBoundary } from \"./error-boundary.js\";\nimport type {\n AppConfig,\n ProviderConfig,\n AppContextValue,\n LifecycleHooks,\n} from \"./types.js\";\n\n/**\n * 默认加载中组件\n */\nfunction DefaultLoading() {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100vh\",\n fontSize: 16,\n color: \"#999\",\n }}\n >\n 加载中...\n </div>\n );\n}\n\n/**\n * 组合多个 Provider\n */\nfunction composeProviders(\n providers: ProviderConfig[]\n): ComponentType<{ children: ReactNode }> {\n const sortedProviders = [...providers].sort(\n (a, b) => (a.order ?? 100) - (b.order ?? 100)\n );\n\n return function ComposedProviders({ children }: { children: ReactNode }) {\n return sortedProviders.reduceRight((acc, { component: Provider, props }) => {\n return <Provider {...props}>{acc}</Provider>;\n }, children);\n };\n}\n\nexport interface RootProviderProps {\n config: AppConfig;\n children?: ReactNode;\n}\n\n/**\n * 根 Provider 组件\n * 自动组合所有必要的 Provider\n */\nexport function RootProvider({ config, children }: RootProviderProps) {\n const {\n appName = \"app\",\n router,\n basename = \"/\",\n strictMode = true,\n antd = { enabled: true },\n providers = [],\n lifecycle,\n } = config;\n\n // 构建应用上下文\n const appContextValue: Partial<AppContextValue> = {\n appName,\n basename,\n isDev: process.env.NODE_ENV === \"development\",\n env: typeof process !== \"undefined\" ? (process.env as Record<string, string>) : {},\n };\n\n // 构建 Provider 列表\n const allProviders: ProviderConfig[] = [\n // 应用上下文 Provider(最外层)\n {\n component: AppContextProvider as ComponentType<{ children: ReactNode }>,\n props: { value: appContextValue },\n order: 0,\n },\n // Ant Design ConfigProvider\n ...(antd.enabled !== false\n ? [\n {\n component: ConfigProvider as ComponentType<{ children: ReactNode }>,\n props: {\n locale: antd.locale || zhCN,\n theme: antd.theme,\n ...antd.configProvider,\n },\n order: 10,\n },\n ]\n : []),\n // 用户自定义 Providers\n ...providers.map((p) => ({ ...p, order: p.order ?? 50 })),\n ];\n\n const ComposedProviders = composeProviders(allProviders);\n\n // 内容:路由或自定义 children\n const content = router ? (\n <Suspense fallback={<DefaultLoading />}>\n <RouterProvider router={router} />\n </Suspense>\n ) : (\n children\n );\n\n // 组装最终结构\n const app = (\n <ErrorBoundary onError={lifecycle?.onError}>\n <ComposedProviders>{content}</ComposedProviders>\n </ErrorBoundary>\n );\n\n // 严格模式包装\n if (strictMode) {\n return <StrictMode>{app}</StrictMode>;\n }\n\n return app;\n}\n\n/**\n * 创建自定义 Provider 配置的辅助函数\n */\nexport function createProvider<P extends Record<string, unknown>>(\n component: ComponentType<P & { children: ReactNode }>,\n props?: Omit<P, \"children\">,\n order?: number\n): ProviderConfig {\n return {\n component: component as ComponentType<{ children: ReactNode }>,\n props,\n order,\n };\n}\n","import { createRoot, type Root } from \"react-dom/client\";\nimport { RootProvider } from \"./providers.js\";\nimport type { AppConfig, MicroAppConfig } from \"./types.js\";\n\nlet root: Root | null = null;\n\n/**\n * 解析应用配置,处理约定式路由\n */\nasync function resolveAppConfig(config: AppConfig): Promise<AppConfig> {\n // 如果已有 router 或未启用约定式路由,直接返回\n if (config.router || !config.conventionalRoutes) {\n return config;\n }\n\n try {\n // 动态导入约定式路由\n // @ts-expect-error @ywkf/routes 是编译时生成的模块\n const routesModule = await import(\"@ywkf/routes\");\n const createRouter = routesModule.createRouter || routesModule.default?.createRouter;\n\n if (typeof createRouter === \"function\") {\n const router = createRouter(config.basename);\n console.log(\"[ywkf] 已自动注入约定式路由\");\n return { ...config, router };\n } else {\n console.warn(\"[ywkf] @ywkf/routes 未导出 createRouter 函数\");\n }\n } catch (error) {\n console.error(\"[ywkf] 加载约定式路由失败:\", error);\n console.warn(\"[ywkf] 请确保已启用约定式路由且 src/pages 目录存在\");\n }\n\n return config;\n}\n\n/**\n * 启动应用\n */\nexport async function bootstrap(config: AppConfig): Promise<void> {\n const { rootId = \"root\", lifecycle } = config;\n\n // 解析约定式路由\n const resolvedConfig = await resolveAppConfig(config);\n\n // 执行挂载前钩子\n if (lifecycle?.onBeforeMount) {\n await lifecycle.onBeforeMount();\n }\n\n // 获取根元素\n const rootElement = document.getElementById(rootId);\n\n if (!rootElement) {\n throw new Error(`找不到根元素 #${rootId}`);\n }\n\n // 创建 React Root\n root = createRoot(rootElement);\n\n // 渲染应用\n root.render(<RootProvider config={resolvedConfig} />);\n\n // 执行挂载后钩子\n if (lifecycle?.onMounted) {\n // 使用 setTimeout 确保 React 渲染完成\n setTimeout(() => {\n lifecycle.onMounted?.();\n }, 0);\n }\n\n // 注册卸载钩子\n if (lifecycle?.onUnmount) {\n window.addEventListener(\"beforeunload\", () => {\n lifecycle.onUnmount?.();\n });\n }\n}\n\n/**\n * 卸载应用\n */\nexport function unmount(): void {\n if (root) {\n root.unmount();\n root = null;\n }\n}\n\n/**\n * 创建微前端应用入口\n * \n * 用于 qiankun/garfish 等微前端框架\n */\nexport function createMicroApp(\n getConfig: (props?: MicroAppConfig) => AppConfig\n) {\n let microRoot: Root | null = null;\n\n return {\n /**\n * 微前端 bootstrap 生命周期\n */\n async bootstrap() {\n console.log(\"[MicroApp] bootstrap\");\n },\n\n /**\n * 微前端 mount 生命周期\n */\n async mount(props?: MicroAppConfig) {\n console.log(\"[MicroApp] mount\", props);\n\n const config = getConfig(props);\n // 解析约定式路由\n const resolvedConfig = await resolveAppConfig(config);\n \n const container = props?.masterProps?.container as Element | undefined;\n const rootId = resolvedConfig.rootId || \"root\";\n\n // 获取根元素(优先使用微前端容器)\n const rootElement = container\n ? container.querySelector(`#${rootId}`)\n : document.getElementById(rootId);\n\n if (!rootElement) {\n throw new Error(`[MicroApp] 找不到根元素 #${rootId}`);\n }\n\n // 执行挂载前钩子\n if (resolvedConfig.lifecycle?.onBeforeMount) {\n await resolvedConfig.lifecycle.onBeforeMount();\n }\n\n // 创建 React Root\n microRoot = createRoot(rootElement);\n microRoot.render(<RootProvider config={resolvedConfig} />);\n\n // 执行挂载后钩子\n if (resolvedConfig.lifecycle?.onMounted) {\n setTimeout(() => {\n resolvedConfig.lifecycle?.onMounted?.();\n }, 0);\n }\n },\n\n /**\n * 微前端 unmount 生命周期\n */\n async unmount(props?: MicroAppConfig) {\n console.log(\"[MicroApp] unmount\", props);\n\n const config = getConfig(props);\n\n // 执行卸载钩子\n if (config.lifecycle?.onUnmount) {\n config.lifecycle.onUnmount();\n }\n\n if (microRoot) {\n microRoot.unmount();\n microRoot = null;\n }\n },\n\n /**\n * 微前端 update 生命周期(可选)\n */\n async update(props?: MicroAppConfig) {\n console.log(\"[MicroApp] update\", props);\n },\n };\n}\n\n/**\n * Garfish 子应用 provider\n *\n * Garfish 要求子应用导出 provider 函数,接收 { dom, basename, props },\n * 返回 { render, destroy } 对象。\n */\nexport function createGarfishProvider(\n getConfig: (overrides?: Partial<AppConfig>) => AppConfig\n) {\n let garfishRoot: Root | null = null;\n\n return function provider(providerContext: {\n dom: Element;\n basename: string;\n props?: Record<string, unknown>;\n }) {\n const { dom, basename } = providerContext;\n\n return {\n render() {\n const config = getConfig({ basename });\n const resolvedConfig = { ...config, basename };\n const rootId = resolvedConfig.rootId || \"root\";\n\n let rootElement = dom.querySelector(`#${rootId}`);\n if (!rootElement) {\n rootElement = document.createElement(\"div\");\n rootElement.id = rootId;\n dom.appendChild(rootElement);\n }\n\n garfishRoot = createRoot(rootElement);\n garfishRoot.render(<RootProvider config={resolvedConfig} />);\n\n if (resolvedConfig.lifecycle?.onMounted) {\n setTimeout(() => resolvedConfig.lifecycle?.onMounted?.(), 0);\n }\n },\n\n destroy() {\n if (garfishRoot) {\n garfishRoot.unmount();\n garfishRoot = null;\n }\n },\n };\n };\n}\n\n/**\n * 判断是否在微前端环境中运行\n */\nexport function isMicroAppEnv(): boolean {\n // qiankun\n if ((window as unknown as Record<string, unknown>).__POWERED_BY_QIANKUN__) {\n return true;\n }\n\n // garfish\n if ((window as unknown as Record<string, unknown>).__GARFISH__) {\n return true;\n }\n\n return false;\n}\n\n/**\n * 获取微前端公共路径\n */\nexport function getMicroAppPublicPath(): string {\n // qiankun 注入的公共路径\n if (\n (window as unknown as Record<string, string>).__INJECTED_PUBLIC_PATH_BY_QIANKUN__\n ) {\n return (window as unknown as Record<string, string>)\n .__INJECTED_PUBLIC_PATH_BY_QIANKUN__;\n }\n\n return \"/\";\n}\n"],"mappings":";AAAA,SAAS,eAAe,kBAAkC;AAwCtD;AAlCJ,IAAM,sBAAuC;AAAA,EAC3C,SAAS;AAAA,EACT,UAAU;AAAA,EACV,OAAO,QAAQ,IAAI,aAAa;AAAA,EAChC,KAAK,CAAC;AACR;AAKO,IAAM,aAAa,cAA+B,mBAAmB;AAUrE,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AACF,GAA4B;AAC1B,QAAM,eAAgC;AAAA,IACpC,GAAG;AAAA,IACH,GAAG;AAAA,IACH,KAAK;AAAA,MACH,GAAG,oBAAoB;AAAA,MACvB,GAAG,MAAM;AAAA,IACX;AAAA,EACF;AAEA,SACE,oBAAC,WAAW,UAAX,EAAoB,OAAO,cAAe,UAAS;AAExD;AAKO,SAAS,SAA0B;AACxC,QAAM,UAAU,WAAW,UAAU;AAErC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE;AAEA,SAAO;AACT;AAKO,SAAS,aAAqB;AACnC,SAAO,OAAO,EAAE;AAClB;AAKO,SAAS,cAAsB;AACpC,SAAO,OAAO,EAAE;AAClB;AAKO,SAAS,SAA6C;AAC3D,SAAO,OAAO,EAAE;AAClB;AAKO,SAAS,WAAoB;AAClC,SAAO,OAAO,EAAE;AAClB;;;ACnFA,SAAS,iBAAiD;AAsD7C,gBAAAA,MAyDD,YAzDC;AAnCN,IAAM,gBAAN,cAA4B,UAGjC;AAAA,EACA,YAAY,OAA2B;AACrC,UAAM,KAAK;AACX,SAAK,QAAQ,EAAE,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9C;AAAA,EAEA,OAAO,yBAAyB,OAAkC;AAChE,WAAO,EAAE,UAAU,MAAM,MAAM;AAAA,EACjC;AAAA,EAEA,kBAAkB,OAAc,WAA4B;AAC1D,YAAQ,MAAM,iCAAiC,OAAO,SAAS;AAC/D,SAAK,MAAM,UAAU,OAAO,SAAS;AAAA,EACvC;AAAA,EAEA,QAAQ,MAAY;AAClB,SAAK,SAAS,EAAE,UAAU,OAAO,OAAO,KAAK,CAAC;AAAA,EAChD;AAAA,EAEA,SAAoB;AAClB,UAAM,EAAE,UAAU,MAAM,IAAI,KAAK;AACjC,UAAM,EAAE,UAAU,SAAS,IAAI,KAAK;AAEpC,QAAI,YAAY,OAAO;AACrB,UAAI,OAAO,aAAa,YAAY;AAClC,eAAO,SAAS,OAAO,KAAK,KAAK;AAAA,MACnC;AAEA,UAAI,UAAU;AACZ,eAAO;AAAA,MACT;AAEA,aAAO,gBAAAA,KAAC,wBAAqB,OAAc,SAAS,KAAK,OAAO;AAAA,IAClE;AAEA,WAAO;AAAA,EACT;AACF;AAUA,SAAS,qBAAqB,EAAE,OAAO,QAAQ,GAA8B;AAC3E,QAAM,QAAQ,QAAQ,IAAI,aAAa;AAEvC,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,WAAW;AAAA,QACX,iBAAiB;AAAA,MACnB;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,YACL,UAAU;AAAA,YACV,SAAS;AAAA,YACT,iBAAiB;AAAA,YACjB,cAAc;AAAA,YACd,WAAW;AAAA,UACb;AAAA,UAEA;AAAA,4BAAAA,KAAC,QAAG,OAAO,EAAE,OAAO,WAAW,cAAc,GAAG,GAAG,4CAAK;AAAA,YACxD,gBAAAA,KAAC,OAAE,OAAO,EAAE,OAAO,QAAQ,cAAc,GAAG,GAAG,gLAE/C;AAAA,YAEC,SACC;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO;AAAA,kBACL,cAAc;AAAA,kBACd,SAAS;AAAA,kBACT,iBAAiB;AAAA,kBACjB,cAAc;AAAA,kBACd,QAAQ;AAAA,gBACV;AAAA,gBAEA;AAAA,kCAAAA,KAAC,aAAQ,OAAO,EAAE,QAAQ,WAAW,YAAY,OAAO,GAAG,4FAE3D;AAAA,kBACA;AAAA,oBAAC;AAAA;AAAA,sBACC,OAAO;AAAA,wBACL,WAAW;AAAA,wBACX,SAAS;AAAA,wBACT,iBAAiB;AAAA,wBACjB,cAAc;AAAA,wBACd,UAAU;AAAA,wBACV,UAAU;AAAA,sBACZ;AAAA,sBAEC;AAAA,8BAAM;AAAA,wBACN;AAAA,wBACA,MAAM;AAAA;AAAA;AAAA,kBACT;AAAA;AAAA;AAAA,YACF;AAAA,YAGF,qBAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,EAAE,GACpC;AAAA,8BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,SAAS;AAAA,kBACT,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,iBAAiB;AAAA,oBACjB,OAAO;AAAA,oBACP,QAAQ;AAAA,oBACR,cAAc;AAAA,oBACd,QAAQ;AAAA,kBACV;AAAA,kBACD;AAAA;AAAA,cAED;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,SAAS,MAAM,OAAO,SAAS,OAAO;AAAA,kBACtC,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,iBAAiB;AAAA,oBACjB,OAAO;AAAA,oBACP,QAAQ;AAAA,oBACR,cAAc;AAAA,oBACd,QAAQ;AAAA,kBACV;AAAA,kBACD;AAAA;AAAA,cAED;AAAA,eACF;AAAA;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;;;AC/JA;AAAA,EAGE;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAC/B,OAAO,UAAU;AAeb,gBAAAC,YAAA;AAFJ,SAAS,iBAAiB;AACxB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,OAAO;AAAA,MACT;AAAA,MACD;AAAA;AAAA,EAED;AAEJ;AAKA,SAAS,iBACP,WACwC;AACxC,QAAM,kBAAkB,CAAC,GAAG,SAAS,EAAE;AAAA,IACrC,CAAC,GAAG,OAAO,EAAE,SAAS,QAAQ,EAAE,SAAS;AAAA,EAC3C;AAEA,SAAO,SAAS,kBAAkB,EAAE,SAAS,GAA4B;AACvE,WAAO,gBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,UAAU,MAAM,MAAM;AAC1E,aAAO,gBAAAA,KAAC,YAAU,GAAG,OAAQ,eAAI;AAAA,IACnC,GAAG,QAAQ;AAAA,EACb;AACF;AAWO,SAAS,aAAa,EAAE,QAAQ,SAAS,GAAsB;AACpE,QAAM;AAAA,IACJ,UAAU;AAAA,IACV;AAAA,IACA,WAAW;AAAA,IACX,aAAa;AAAA,IACb,OAAO,EAAE,SAAS,KAAK;AAAA,IACvB,YAAY,CAAC;AAAA,IACb;AAAA,EACF,IAAI;AAGJ,QAAM,kBAA4C;AAAA,IAChD;AAAA,IACA;AAAA,IACA,OAAO,QAAQ,IAAI,aAAa;AAAA,IAChC,KAAK,OAAO,YAAY,cAAe,QAAQ,MAAiC,CAAC;AAAA,EACnF;AAGA,QAAM,eAAiC;AAAA;AAAA,IAErC;AAAA,MACE,WAAW;AAAA,MACX,OAAO,EAAE,OAAO,gBAAgB;AAAA,MAChC,OAAO;AAAA,IACT;AAAA;AAAA,IAEA,GAAI,KAAK,YAAY,QACjB;AAAA,MACE;AAAA,QACE,WAAW;AAAA,QACX,OAAO;AAAA,UACL,QAAQ,KAAK,UAAU;AAAA,UACvB,OAAO,KAAK;AAAA,UACZ,GAAG,KAAK;AAAA,QACV;AAAA,QACA,OAAO;AAAA,MACT;AAAA,IACF,IACA,CAAC;AAAA;AAAA,IAEL,GAAG,UAAU,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,EAAE,SAAS,GAAG,EAAE;AAAA,EAC1D;AAEA,QAAM,oBAAoB,iBAAiB,YAAY;AAGvD,QAAM,UAAU,SACd,gBAAAA,KAAC,YAAS,UAAU,gBAAAA,KAAC,kBAAe,GAClC,0BAAAA,KAAC,kBAAe,QAAgB,GAClC,IAEA;AAIF,QAAM,MACJ,gBAAAA,KAAC,iBAAc,SAAS,WAAW,SACjC,0BAAAA,KAAC,qBAAmB,mBAAQ,GAC9B;AAIF,MAAI,YAAY;AACd,WAAO,gBAAAA,KAAC,cAAY,eAAI;AAAA,EAC1B;AAEA,SAAO;AACT;AAKO,SAAS,eACd,WACA,OACA,OACgB;AAChB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACpJA,SAAS,kBAA6B;AA6DxB,gBAAAC,YAAA;AAzDd,IAAI,OAAoB;AAKxB,eAAe,iBAAiB,QAAuC;AAErE,MAAI,OAAO,UAAU,CAAC,OAAO,oBAAoB;AAC/C,WAAO;AAAA,EACT;AAEA,MAAI;AAGF,UAAM,eAAe,MAAM,OAAO,cAAc;AAChD,UAAM,eAAe,aAAa,gBAAgB,aAAa,SAAS;AAExE,QAAI,OAAO,iBAAiB,YAAY;AACtC,YAAM,SAAS,aAAa,OAAO,QAAQ;AAC3C,cAAQ,IAAI,qEAAmB;AAC/B,aAAO,EAAE,GAAG,QAAQ,OAAO;AAAA,IAC7B,OAAO;AACL,cAAQ,KAAK,kEAAyC;AAAA,IACxD;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,kEAAqB,KAAK;AACxC,YAAQ,KAAK,oHAAoC;AAAA,EACnD;AAEA,SAAO;AACT;AAKA,eAAsB,UAAU,QAAkC;AAChE,QAAM,EAAE,SAAS,QAAQ,UAAU,IAAI;AAGvC,QAAM,iBAAiB,MAAM,iBAAiB,MAAM;AAGpD,MAAI,WAAW,eAAe;AAC5B,UAAM,UAAU,cAAc;AAAA,EAChC;AAGA,QAAM,cAAc,SAAS,eAAe,MAAM;AAElD,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,MAAM,yCAAW,MAAM,EAAE;AAAA,EACrC;AAGA,SAAO,WAAW,WAAW;AAG7B,OAAK,OAAO,gBAAAA,KAAC,gBAAa,QAAQ,gBAAgB,CAAE;AAGpD,MAAI,WAAW,WAAW;AAExB,eAAW,MAAM;AACf,gBAAU,YAAY;AAAA,IACxB,GAAG,CAAC;AAAA,EACN;AAGA,MAAI,WAAW,WAAW;AACxB,WAAO,iBAAiB,gBAAgB,MAAM;AAC5C,gBAAU,YAAY;AAAA,IACxB,CAAC;AAAA,EACH;AACF;AAKO,SAAS,UAAgB;AAC9B,MAAI,MAAM;AACR,SAAK,QAAQ;AACb,WAAO;AAAA,EACT;AACF;AAOO,SAAS,eACd,WACA;AACA,MAAI,YAAyB;AAE7B,SAAO;AAAA;AAAA;AAAA;AAAA,IAIL,MAAM,YAAY;AAChB,cAAQ,IAAI,sBAAsB;AAAA,IACpC;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,MAAM,OAAwB;AAClC,cAAQ,IAAI,oBAAoB,KAAK;AAErC,YAAM,SAAS,UAAU,KAAK;AAE9B,YAAM,iBAAiB,MAAM,iBAAiB,MAAM;AAEpD,YAAM,YAAY,OAAO,aAAa;AACtC,YAAM,SAAS,eAAe,UAAU;AAGxC,YAAM,cAAc,YAChB,UAAU,cAAc,IAAI,MAAM,EAAE,IACpC,SAAS,eAAe,MAAM;AAElC,UAAI,CAAC,aAAa;AAChB,cAAM,IAAI,MAAM,oDAAsB,MAAM,EAAE;AAAA,MAChD;AAGA,UAAI,eAAe,WAAW,eAAe;AAC3C,cAAM,eAAe,UAAU,cAAc;AAAA,MAC/C;AAGA,kBAAY,WAAW,WAAW;AAClC,gBAAU,OAAO,gBAAAA,KAAC,gBAAa,QAAQ,gBAAgB,CAAE;AAGzD,UAAI,eAAe,WAAW,WAAW;AACvC,mBAAW,MAAM;AACf,yBAAe,WAAW,YAAY;AAAA,QACxC,GAAG,CAAC;AAAA,MACN;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,QAAQ,OAAwB;AACpC,cAAQ,IAAI,sBAAsB,KAAK;AAEvC,YAAM,SAAS,UAAU,KAAK;AAG9B,UAAI,OAAO,WAAW,WAAW;AAC/B,eAAO,UAAU,UAAU;AAAA,MAC7B;AAEA,UAAI,WAAW;AACb,kBAAU,QAAQ;AAClB,oBAAY;AAAA,MACd;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,OAAO,OAAwB;AACnC,cAAQ,IAAI,qBAAqB,KAAK;AAAA,IACxC;AAAA,EACF;AACF;AAQO,SAAS,sBACd,WACA;AACA,MAAI,cAA2B;AAE/B,SAAO,SAAS,SAAS,iBAItB;AACD,UAAM,EAAE,KAAK,SAAS,IAAI;AAE1B,WAAO;AAAA,MACL,SAAS;AACP,cAAM,SAAS,UAAU,EAAE,SAAS,CAAC;AACrC,cAAM,iBAAiB,EAAE,GAAG,QAAQ,SAAS;AAC7C,cAAM,SAAS,eAAe,UAAU;AAExC,YAAI,cAAc,IAAI,cAAc,IAAI,MAAM,EAAE;AAChD,YAAI,CAAC,aAAa;AAChB,wBAAc,SAAS,cAAc,KAAK;AAC1C,sBAAY,KAAK;AACjB,cAAI,YAAY,WAAW;AAAA,QAC7B;AAEA,sBAAc,WAAW,WAAW;AACpC,oBAAY,OAAO,gBAAAA,KAAC,gBAAa,QAAQ,gBAAgB,CAAE;AAE3D,YAAI,eAAe,WAAW,WAAW;AACvC,qBAAW,MAAM,eAAe,WAAW,YAAY,GAAG,CAAC;AAAA,QAC7D;AAAA,MACF;AAAA,MAEA,UAAU;AACR,YAAI,aAAa;AACf,sBAAY,QAAQ;AACpB,wBAAc;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAKO,SAAS,gBAAyB;AAEvC,MAAK,OAA8C,wBAAwB;AACzE,WAAO;AAAA,EACT;AAGA,MAAK,OAA8C,aAAa;AAC9D,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAKO,SAAS,wBAAgC;AAE9C,MACG,OAA6C,qCAC9C;AACA,WAAQ,OACL;AAAA,EACL;AAEA,SAAO;AACT;","names":["jsx","jsx","jsx"]}
1
+ {"version":3,"sources":["../../src/runtime/bootstrap.tsx","../../src/runtime/providers.tsx","../../src/runtime/context.tsx","../../src/runtime/error-boundary.tsx"],"sourcesContent":["import { createRoot, type Root } from \"react-dom/client\";\nimport { RootProvider } from \"./providers.js\";\nimport type { AppConfig, MicroAppConfig } from \"./types.js\";\n\nlet root: Root | null = null;\n\n/**\n * 解析应用配置,处理约定式路由\n */\nasync function resolveAppConfig(config: AppConfig): Promise<AppConfig> {\n // 如果已有 router 或未启用约定式路由,直接返回\n if (config.router || !config.conventionalRoutes) {\n return config;\n }\n\n try {\n // 动态导入约定式路由\n // @ts-expect-error @ywkf/routes 是编译时生成的模块\n const routesModule = await import(\"@ywkf/routes\");\n const createRouter = routesModule.createRouter || routesModule.default?.createRouter;\n\n if (typeof createRouter === \"function\") {\n const router = createRouter(config.basename);\n console.log(\"[ywkf] 已自动注入约定式路由\");\n return { ...config, router };\n } else {\n console.warn(\"[ywkf] @ywkf/routes 未导出 createRouter 函数\");\n }\n } catch (error) {\n console.error(\"[ywkf] 加载约定式路由失败:\", error);\n console.warn(\"[ywkf] 请确保已启用约定式路由且 src/pages 目录存在\");\n }\n\n return config;\n}\n\n/**\n * 启动应用\n */\nexport async function bootstrap(config: AppConfig): Promise<void> {\n const { rootId = \"root\", lifecycle } = config;\n\n // 解析约定式路由\n const resolvedConfig = await resolveAppConfig(config);\n\n // 执行挂载前钩子\n if (lifecycle?.onBeforeMount) {\n await lifecycle.onBeforeMount();\n }\n\n // 获取根元素\n const rootElement = document.getElementById(rootId);\n\n if (!rootElement) {\n throw new Error(`找不到根元素 #${rootId}`);\n }\n\n // 创建 React Root\n root = createRoot(rootElement);\n\n // 渲染应用\n root.render(<RootProvider config={resolvedConfig} />);\n\n // 执行挂载后钩子\n if (lifecycle?.onMounted) {\n // 使用 setTimeout 确保 React 渲染完成\n setTimeout(() => {\n lifecycle.onMounted?.();\n }, 0);\n }\n\n // 注册卸载钩子\n if (lifecycle?.onUnmount) {\n window.addEventListener(\"beforeunload\", () => {\n lifecycle.onUnmount?.();\n });\n }\n}\n\n/**\n * 卸载应用\n */\nexport function unmount(): void {\n if (root) {\n root.unmount();\n root = null;\n }\n}\n\n/**\n * 创建微前端应用入口\n *\n * 用于 qiankun/garfish 等微前端框架\n */\nexport function createMicroApp(getConfig: (props?: MicroAppConfig) => AppConfig) {\n let microRoot: Root | null = null;\n\n return {\n /**\n * 微前端 bootstrap 生命周期\n */\n async bootstrap() {\n console.log(\"[MicroApp] bootstrap\");\n },\n\n /**\n * 微前端 mount 生命周期\n */\n async mount(props?: MicroAppConfig) {\n console.log(\"[MicroApp] mount\", props);\n\n const config = getConfig(props);\n // 解析约定式路由\n const resolvedConfig = await resolveAppConfig(config);\n\n const container = props?.masterProps?.container as Element | undefined;\n const rootId = resolvedConfig.rootId || \"root\";\n\n // 获取根元素(优先使用微前端容器)\n const rootElement = container\n ? container.querySelector(`#${rootId}`)\n : document.getElementById(rootId);\n\n if (!rootElement) {\n throw new Error(`[MicroApp] 找不到根元素 #${rootId}`);\n }\n\n // 执行挂载前钩子\n if (resolvedConfig.lifecycle?.onBeforeMount) {\n await resolvedConfig.lifecycle.onBeforeMount();\n }\n\n // 创建 React Root\n microRoot = createRoot(rootElement);\n microRoot.render(<RootProvider config={resolvedConfig} />);\n\n // 执行挂载后钩子\n if (resolvedConfig.lifecycle?.onMounted) {\n setTimeout(() => {\n resolvedConfig.lifecycle?.onMounted?.();\n }, 0);\n }\n },\n\n /**\n * 微前端 unmount 生命周期\n */\n async unmount(props?: MicroAppConfig) {\n console.log(\"[MicroApp] unmount\", props);\n\n const config = getConfig(props);\n\n // 执行卸载钩子\n if (config.lifecycle?.onUnmount) {\n config.lifecycle.onUnmount();\n }\n\n if (microRoot) {\n microRoot.unmount();\n microRoot = null;\n }\n },\n\n /**\n * 微前端 update 生命周期(可选)\n */\n async update(props?: MicroAppConfig) {\n console.log(\"[MicroApp] update\", props);\n },\n };\n}\n\n/**\n * Garfish 子应用 provider\n *\n * Garfish 要求子应用导出 provider 函数,接收 { dom, basename, props },\n * 返回 { render, destroy } 对象。\n */\nexport function createGarfishProvider(getConfig: (overrides?: Partial<AppConfig>) => AppConfig) {\n let garfishRoot: Root | null = null;\n\n return function provider(providerContext: {\n dom: Element;\n basename: string;\n props?: Record<string, unknown>;\n }) {\n const { dom, basename } = providerContext;\n\n return {\n render() {\n const config = getConfig({ basename });\n const resolvedConfig = { ...config, basename };\n const rootId = resolvedConfig.rootId || \"root\";\n\n let rootElement = dom.querySelector(`#${rootId}`);\n if (!rootElement) {\n rootElement = document.createElement(\"div\");\n rootElement.id = rootId;\n dom.appendChild(rootElement);\n }\n\n garfishRoot = createRoot(rootElement);\n garfishRoot.render(<RootProvider config={resolvedConfig} />);\n\n if (resolvedConfig.lifecycle?.onMounted) {\n setTimeout(() => resolvedConfig.lifecycle?.onMounted?.(), 0);\n }\n },\n\n destroy() {\n if (garfishRoot) {\n garfishRoot.unmount();\n garfishRoot = null;\n }\n },\n };\n };\n}\n\n/**\n * 判断是否在微前端环境中运行\n */\nexport function isMicroAppEnv(): boolean {\n // qiankun\n if ((window as unknown as Record<string, unknown>).__POWERED_BY_QIANKUN__) {\n return true;\n }\n\n // garfish\n if ((window as unknown as Record<string, unknown>).__GARFISH__) {\n return true;\n }\n\n return false;\n}\n\n/**\n * 获取微前端公共路径\n */\nexport function getMicroAppPublicPath(): string {\n // qiankun 注入的公共路径\n if ((window as unknown as Record<string, string>).__INJECTED_PUBLIC_PATH_BY_QIANKUN__) {\n return (window as unknown as Record<string, string>).__INJECTED_PUBLIC_PATH_BY_QIANKUN__;\n }\n\n return \"/\";\n}\n","import { ConfigProvider } from \"antd\";\nimport zhCN from \"antd/locale/zh_CN.js\";\nimport { type ComponentType, type ReactNode, StrictMode, Suspense } from \"react\";\nimport { RouterProvider } from \"react-router\";\nimport { AppContextProvider } from \"./context.js\";\nimport { ErrorBoundary } from \"./error-boundary.js\";\nimport type { AppConfig, AppContextValue, ProviderConfig } from \"./types.js\";\n\n/**\n * 默认加载中组件\n */\nfunction DefaultLoading() {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100vh\",\n fontSize: 16,\n color: \"#999\",\n }}\n >\n 加载中...\n </div>\n );\n}\n\n/**\n * 组合多个 Provider\n */\nfunction composeProviders(providers: ProviderConfig[]): ComponentType<{ children: ReactNode }> {\n const sortedProviders = [...providers].sort((a, b) => (a.order ?? 100) - (b.order ?? 100));\n\n return function ComposedProviders({ children }: { children: ReactNode }) {\n return sortedProviders.reduceRight((acc, { component: Provider, props }) => {\n return <Provider {...props}>{acc}</Provider>;\n }, children);\n };\n}\n\nexport interface RootProviderProps {\n config: AppConfig;\n children?: ReactNode;\n}\n\n/**\n * 根 Provider 组件\n * 自动组合所有必要的 Provider\n */\nexport function RootProvider({ config, children }: RootProviderProps) {\n const {\n appName = \"app\",\n router,\n basename = \"/\",\n strictMode = true,\n antd = { enabled: true },\n providers = [],\n lifecycle,\n } = config;\n\n // 构建应用上下文\n const appContextValue: Partial<AppContextValue> = {\n appName,\n basename,\n isDev: process.env.NODE_ENV === \"development\",\n env: typeof process !== \"undefined\" ? (process.env as Record<string, string>) : {},\n };\n\n // 构建 Provider 列表\n const allProviders: ProviderConfig[] = [\n // 应用上下文 Provider(最外层)\n {\n component: AppContextProvider as ComponentType<{ children: ReactNode }>,\n props: { value: appContextValue },\n order: 0,\n },\n // Ant Design ConfigProvider\n ...(antd.enabled !== false\n ? [\n {\n component: ConfigProvider as ComponentType<{ children: ReactNode }>,\n props: {\n locale: antd.locale || zhCN,\n theme: antd.theme,\n ...antd.configProvider,\n },\n order: 10,\n },\n ]\n : []),\n // 用户自定义 Providers\n ...providers.map((p) => ({ ...p, order: p.order ?? 50 })),\n ];\n\n const ComposedProviders = composeProviders(allProviders);\n\n // 内容:路由或自定义 children\n const content = router ? (\n <Suspense fallback={<DefaultLoading />}>\n <RouterProvider router={router} />\n </Suspense>\n ) : (\n children\n );\n\n // 组装最终结构\n const app = (\n <ErrorBoundary onError={lifecycle?.onError}>\n <ComposedProviders>{content}</ComposedProviders>\n </ErrorBoundary>\n );\n\n // 严格模式包装\n if (strictMode) {\n return <StrictMode>{app}</StrictMode>;\n }\n\n return app;\n}\n\n/**\n * 创建自定义 Provider 配置的辅助函数\n */\nexport function createProvider<P extends Record<string, unknown>>(\n component: ComponentType<P & { children: ReactNode }>,\n props?: Omit<P, \"children\">,\n order?: number,\n): ProviderConfig {\n return {\n component: component as ComponentType<{ children: ReactNode }>,\n props,\n order,\n };\n}\n","import { createContext, type ReactNode, useContext } from \"react\";\nimport type { AppContextValue } from \"./types.js\";\n\n/**\n * 默认上下文值\n */\nconst defaultContextValue: AppContextValue = {\n appName: \"app\",\n basename: \"/\",\n isDev: process.env.NODE_ENV === \"development\",\n env: {},\n};\n\n/**\n * 应用上下文\n */\nexport const AppContext = createContext<AppContextValue>(defaultContextValue);\n\n/**\n * 应用上下文 Provider\n */\nexport interface AppContextProviderProps {\n value: Partial<AppContextValue>;\n children: ReactNode;\n}\n\nexport function AppContextProvider({ value, children }: AppContextProviderProps) {\n const contextValue: AppContextValue = {\n ...defaultContextValue,\n ...value,\n env: {\n ...defaultContextValue.env,\n ...value.env,\n },\n };\n\n return <AppContext.Provider value={contextValue}>{children}</AppContext.Provider>;\n}\n\n/**\n * 获取应用上下文的 Hook\n */\nexport function useApp(): AppContextValue {\n const context = useContext(AppContext);\n\n if (!context) {\n throw new Error(\"useApp must be used within AppContextProvider\");\n }\n\n return context;\n}\n\n/**\n * 获取应用名称\n */\nexport function useAppName(): string {\n return useApp().appName;\n}\n\n/**\n * 获取路由 basename\n */\nexport function useBasename(): string {\n return useApp().basename;\n}\n\n/**\n * 获取环境变量\n */\nexport function useEnv(): Record<string, string | undefined> {\n return useApp().env;\n}\n\n/**\n * 判断是否开发环境\n */\nexport function useIsDev(): boolean {\n return useApp().isDev;\n}\n","import { Component, type ErrorInfo, type ReactNode } from \"react\";\n\nexport interface ErrorBoundaryProps {\n /** 子组件 */\n children: ReactNode;\n /** 错误回退 UI */\n fallback?: ReactNode | ((error: Error, reset: () => void) => ReactNode);\n /** 错误回调 */\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * 错误边界组件\n */\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n console.error(\"[ErrorBoundary] Caught error:\", error, errorInfo);\n this.props.onError?.(error, errorInfo);\n }\n\n reset = (): void => {\n this.setState({ hasError: false, error: null });\n };\n\n render(): ReactNode {\n const { hasError, error } = this.state;\n const { children, fallback } = this.props;\n\n if (hasError && error) {\n if (typeof fallback === \"function\") {\n return fallback(error, this.reset);\n }\n\n if (fallback) {\n return fallback;\n }\n\n return <DefaultErrorFallback error={error} onReset={this.reset} />;\n }\n\n return children;\n }\n}\n\n/**\n * 默认错误回退 UI\n */\ninterface DefaultErrorFallbackProps {\n error: Error;\n onReset: () => void;\n}\n\nfunction DefaultErrorFallback({ error, onReset }: DefaultErrorFallbackProps) {\n const isDev = process.env.NODE_ENV === \"development\";\n\n return (\n <div\n style={{\n padding: 24,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n minHeight: \"100vh\",\n backgroundColor: \"#f5f5f5\",\n }}\n >\n <div\n style={{\n maxWidth: 600,\n padding: 32,\n backgroundColor: \"#fff\",\n borderRadius: 8,\n boxShadow: \"0 2px 8px rgba(0,0,0,0.1)\",\n }}\n >\n <h1 style={{ color: \"#ff4d4f\", marginBottom: 16 }}>页面出错了</h1>\n <p style={{ color: \"#666\", marginBottom: 16 }}>\n 抱歉,页面遇到了一些问题。请尝试刷新页面或联系管理员。\n </p>\n\n {isDev && (\n <details\n style={{\n marginBottom: 16,\n padding: 12,\n backgroundColor: \"#fff2f0\",\n borderRadius: 4,\n border: \"1px solid #ffccc7\",\n }}\n >\n <summary style={{ cursor: \"pointer\", fontWeight: \"bold\" }}>\n 错误详情(仅开发环境可见)\n </summary>\n <pre\n style={{\n marginTop: 8,\n padding: 8,\n backgroundColor: \"#fff\",\n borderRadius: 4,\n overflow: \"auto\",\n fontSize: 12,\n }}\n >\n {error.message}\n {\"\\n\\n\"}\n {error.stack}\n </pre>\n </details>\n )}\n\n <div style={{ display: \"flex\", gap: 8 }}>\n <button\n onClick={onReset}\n style={{\n padding: \"8px 16px\",\n backgroundColor: \"#1890ff\",\n color: \"#fff\",\n border: \"none\",\n borderRadius: 4,\n cursor: \"pointer\",\n }}\n >\n 重试\n </button>\n <button\n onClick={() => window.location.reload()}\n style={{\n padding: \"8px 16px\",\n backgroundColor: \"#fff\",\n color: \"#666\",\n border: \"1px solid #d9d9d9\",\n borderRadius: 4,\n cursor: \"pointer\",\n }}\n >\n 刷新页面\n </button>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":["jsx","jsx","jsx"]}
@@ -1,5 +1,5 @@
1
1
  import { Configuration } from '@rspack/core';
2
- import { A as AppConfig, P as ProviderConfig } from './types-BztKUufh.js';
2
+ import { A as AppConfig, P as ProviderConfig } from './types-DbUq-VY8.js';
3
3
 
4
4
  /**
5
5
  * 路由项定义
@@ -61,7 +61,7 @@ interface BuildHooks {
61
61
  /**
62
62
  * 修改 Rspack 配置
63
63
  */
64
- modifyRspackConfig?: (config: Configuration, context: PluginContext) => Configuration | void | Promise<Configuration | void>;
64
+ modifyRspackConfig?: (config: Configuration, context: PluginContext) => Configuration | undefined | Promise<Configuration | undefined>;
65
65
  /**
66
66
  * 构建开始前
67
67
  */
@@ -92,7 +92,7 @@ interface RouterHooks {
92
92
  /**
93
93
  * 修改路由配置
94
94
  */
95
- modifyRoutes?: (routes: RouteItem[], context: PluginContext) => RouteItem[] | void | Promise<RouteItem[] | void>;
95
+ modifyRoutes?: (routes: RouteItem[], context: PluginContext) => RouteItem[] | undefined | Promise<RouteItem[] | undefined>;
96
96
  /**
97
97
  * 路由生成后
98
98
  */
@@ -105,7 +105,7 @@ interface RuntimeHooks {
105
105
  /**
106
106
  * 修改运行时配置
107
107
  */
108
- modifyAppConfig?: (appConfig: AppConfig, context: PluginContext) => AppConfig | void;
108
+ modifyAppConfig?: (appConfig: AppConfig, context: PluginContext) => AppConfig | undefined;
109
109
  /**
110
110
  * 添加 Provider
111
111
  */
@@ -159,25 +159,25 @@ interface GeneratorHooks {
159
159
  /**
160
160
  * 修改入口文件代码
161
161
  */
162
- modifyEntryCode?: (code: string, context: GeneratorContext) => string | void;
162
+ modifyEntryCode?: (code: string, context: GeneratorContext) => string | undefined;
163
163
  /**
164
164
  * 修改启动文件代码
165
165
  */
166
- modifyBootstrapCode?: (code: string, context: GeneratorContext) => string | void;
166
+ modifyBootstrapCode?: (code: string, context: GeneratorContext) => string | undefined;
167
167
  /**
168
168
  * 注入入口代码
169
169
  * 返回需要注入到入口文件的代码片段
170
170
  */
171
- injectEntry?: (context: GeneratorContext) => CodeInjection | void;
171
+ injectEntry?: (context: GeneratorContext) => CodeInjection | undefined;
172
172
  /**
173
173
  * 注入启动代码
174
174
  * 返回需要注入到启动文件的代码片段
175
175
  */
176
- injectBootstrap?: (context: GeneratorContext) => CodeInjection | void;
176
+ injectBootstrap?: (context: GeneratorContext) => CodeInjection | undefined;
177
177
  /**
178
178
  * 生成额外文件
179
179
  */
180
- generateFiles?: (context: GeneratorContext) => GeneratedFile[] | void;
180
+ generateFiles?: (context: GeneratorContext) => GeneratedFile[] | undefined;
181
181
  /**
182
182
  * 代码生成完成后
183
183
  */
@@ -225,7 +225,7 @@ interface PluginAPI {
225
225
  /** 添加 Rspack 插件 */
226
226
  addRspackPlugin: (plugin: unknown) => void;
227
227
  /** 修改 Rspack 配置 */
228
- modifyRspackConfig: (modifier: (config: Configuration) => Configuration | void) => void;
228
+ modifyRspackConfig: (modifier: (config: Configuration) => Configuration | undefined) => void;
229
229
  }
230
230
 
231
231
  /**
@@ -336,7 +336,7 @@ interface ToolsConfig {
336
336
  rspack?: (config: Configuration, context: {
337
337
  isDev: boolean;
338
338
  isProd: boolean;
339
- }) => Configuration | void;
339
+ }) => Configuration | undefined;
340
340
  }
341
341
  /**
342
342
  * 环境变量配置
@@ -387,4 +387,4 @@ declare function defineConfig(config: YwkfConfig): YwkfConfig;
387
387
  */
388
388
  declare const defaultConfig: Required<YwkfConfig>;
389
389
 
390
- export { type BuildHooks as B, type CodeInjection as C, type DevServerConfig as D, type EnvConfig as E, type GeneratorContext as G, type HtmlConfig as H, type MicroFrontendConfig as M, type OutputConfig as O, type PerformanceConfig as P, type RouterConfig as R, type StyleConfig as S, type ToolsConfig as T, type YwkfConfig as Y, defaultConfig as a, type PluginHooks as b, type PluginConfig as c, defineConfig as d, type YwkfPlugin as e, type PluginContext as f, type RouterHooks as g, type RuntimeHooks as h, type GeneratorHooks as i, type GeneratedFile as j, type RouteItem as k, type PluginLogger as l, type PluginAPI as m, type DefinePlugin as n };
390
+ export { type BuildHooks as B, type CodeInjection as C, type DevServerConfig as D, type EnvConfig as E, type GeneratorContext as G, type HtmlConfig as H, type MicroFrontendConfig as M, type OutputConfig as O, type PerformanceConfig as P, type RouterConfig as R, type StyleConfig as S, type ToolsConfig as T, type YwkfConfig as Y, defineConfig as a, type PluginHooks as b, type PluginConfig as c, defaultConfig as d, type YwkfPlugin as e, type GeneratedFile as f, type GeneratorHooks as g, type PluginContext as h, type RouterHooks as i, type RuntimeHooks as j, type RouteItem as k, type DefinePlugin as l, type PluginAPI as m, type PluginLogger as n };
@@ -169,4 +169,4 @@ interface RequestConfig {
169
169
  errorHandler?: (error: Record<string, unknown>) => unknown;
170
170
  }
171
171
 
172
- export type { AppConfig as A, LifecycleHooks as L, MicroAppConfig as M, ProviderConfig as P, Result as R, AntdConfig as a, AppContextValue as b, RequestConfig as c };
172
+ export type { AppConfig as A, LifecycleHooks as L, MicroAppConfig as M, ProviderConfig as P, RequestConfig as R, AntdConfig as a, AppContextValue as b, Result as c };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@4399ywkf/core",
3
- "version": "5.0.18",
3
+ "version": "5.0.20",
4
4
  "description": "4399运维开发前端框架核心",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",