@4399ywkf/core 4.0.84 → 5.0.0
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/cli/index.js +2180 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/index.d.ts +37 -0
- package/dist/config/index.js +143 -0
- package/dist/config/index.js.map +1 -0
- package/dist/index.d.ts +496 -6
- package/dist/index.js +3671 -49
- package/dist/index.js.map +1 -0
- package/dist/plugin/index.d.ts +110 -0
- package/dist/plugin/index.js +277 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/router/index.d.ts +126 -0
- package/dist/router/index.js +390 -0
- package/dist/router/index.js.map +1 -0
- package/dist/rspack/index.d.ts +29 -0
- package/dist/rspack/index.js +1574 -0
- package/dist/rspack/index.js.map +1 -0
- package/dist/runtime/index.d.ts +120 -0
- package/dist/runtime/index.js +406 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/schema-BuqmN_ra.d.ts +390 -0
- package/dist/types-BZV_2QtD.d.ts +97 -0
- package/package.json +88 -37
- package/README.md +0 -3
- package/compiled/dotenv/LICENSE +0 -23
- package/compiled/dotenv/index.js +0 -1
- package/compiled/dotenv/lib/main.d.ts +0 -73
- package/compiled/dotenv/package.json +0 -1
- package/compiled/dotenv/types/index.d.ts +0 -59
- package/compiled/dotenv-expand/LICENSE +0 -24
- package/compiled/dotenv-expand/index.js +0 -1
- package/compiled/dotenv-expand/lib/main.d.ts +0 -29
- package/compiled/dotenv-expand/package.json +0 -1
- package/compiled/just-diff/LICENSE +0 -21
- package/compiled/just-diff/index.d.ts +0 -20
- package/compiled/just-diff/index.js +0 -1
- package/compiled/just-diff/package.json +0 -1
- package/dist/config/config.d.ts +0 -62
- package/dist/config/config.js +0 -240
- package/dist/config/utils.d.ts +0 -8
- package/dist/config/utils.js +0 -40
- package/dist/constants.d.ts +0 -9
- package/dist/constants.js +0 -45
- package/dist/route/defineRoutes.d.ts +0 -1
- package/dist/route/defineRoutes.js +0 -61
- package/dist/route/route.d.ts +0 -3
- package/dist/route/route.js +0 -27
- package/dist/route/routeUtils.d.ts +0 -8
- package/dist/route/routeUtils.js +0 -46
- package/dist/route/routesConfig.d.ts +0 -6
- package/dist/route/routesConfig.js +0 -125
- package/dist/route/routesConvention.d.ts +0 -5
- package/dist/route/routesConvention.js +0 -88
- package/dist/route/utils.d.ts +0 -8
- package/dist/route/utils.js +0 -59
- package/dist/service/command.d.ts +0 -30
- package/dist/service/command.js +0 -39
- package/dist/service/env.d.ts +0 -4
- package/dist/service/env.js +0 -47
- package/dist/service/generatePlugin.d.ts +0 -4
- package/dist/service/generatePlugin.js +0 -102
- package/dist/service/generator.d.ts +0 -71
- package/dist/service/generator.js +0 -40
- package/dist/service/hook.d.ts +0 -16
- package/dist/service/hook.js +0 -52
- package/dist/service/path.d.ts +0 -15
- package/dist/service/path.js +0 -55
- package/dist/service/plugin.d.ts +0 -61
- package/dist/service/plugin.js +0 -174
- package/dist/service/pluginAPI.d.ts +0 -49
- package/dist/service/pluginAPI.js +0 -233
- package/dist/service/service.d.ts +0 -147
- package/dist/service/service.js +0 -544
- package/dist/service/servicePlugin.d.ts +0 -3
- package/dist/service/servicePlugin.js +0 -37
- package/dist/service/telemetry.d.ts +0 -32
- package/dist/service/telemetry.js +0 -127
- package/dist/service/utils.d.ts +0 -2
- package/dist/service/utils.js +0 -36
- package/dist/types.d.ts +0 -116
- package/dist/types.js +0 -77
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
// src/runtime/context.tsx
|
|
2
|
+
import { createContext, useContext } from "react";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
var defaultContextValue = {
|
|
5
|
+
appName: "app",
|
|
6
|
+
basename: "/",
|
|
7
|
+
isDev: process.env.NODE_ENV === "development",
|
|
8
|
+
env: {}
|
|
9
|
+
};
|
|
10
|
+
var AppContext = createContext(defaultContextValue);
|
|
11
|
+
function AppContextProvider({
|
|
12
|
+
value,
|
|
13
|
+
children
|
|
14
|
+
}) {
|
|
15
|
+
const contextValue = {
|
|
16
|
+
...defaultContextValue,
|
|
17
|
+
...value,
|
|
18
|
+
env: {
|
|
19
|
+
...defaultContextValue.env,
|
|
20
|
+
...value.env
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
return /* @__PURE__ */ jsx(AppContext.Provider, { value: contextValue, children });
|
|
24
|
+
}
|
|
25
|
+
function useApp() {
|
|
26
|
+
const context = useContext(AppContext);
|
|
27
|
+
if (!context) {
|
|
28
|
+
throw new Error("useApp must be used within AppContextProvider");
|
|
29
|
+
}
|
|
30
|
+
return context;
|
|
31
|
+
}
|
|
32
|
+
function useAppName() {
|
|
33
|
+
return useApp().appName;
|
|
34
|
+
}
|
|
35
|
+
function useBasename() {
|
|
36
|
+
return useApp().basename;
|
|
37
|
+
}
|
|
38
|
+
function useEnv() {
|
|
39
|
+
return useApp().env;
|
|
40
|
+
}
|
|
41
|
+
function useIsDev() {
|
|
42
|
+
return useApp().isDev;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// src/runtime/error-boundary.tsx
|
|
46
|
+
import { Component } from "react";
|
|
47
|
+
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
48
|
+
var ErrorBoundary = class extends Component {
|
|
49
|
+
constructor(props) {
|
|
50
|
+
super(props);
|
|
51
|
+
this.state = { hasError: false, error: null };
|
|
52
|
+
}
|
|
53
|
+
static getDerivedStateFromError(error) {
|
|
54
|
+
return { hasError: true, error };
|
|
55
|
+
}
|
|
56
|
+
componentDidCatch(error, errorInfo) {
|
|
57
|
+
console.error("[ErrorBoundary] Caught error:", error, errorInfo);
|
|
58
|
+
this.props.onError?.(error, errorInfo);
|
|
59
|
+
}
|
|
60
|
+
reset = () => {
|
|
61
|
+
this.setState({ hasError: false, error: null });
|
|
62
|
+
};
|
|
63
|
+
render() {
|
|
64
|
+
const { hasError, error } = this.state;
|
|
65
|
+
const { children, fallback } = this.props;
|
|
66
|
+
if (hasError && error) {
|
|
67
|
+
if (typeof fallback === "function") {
|
|
68
|
+
return fallback(error, this.reset);
|
|
69
|
+
}
|
|
70
|
+
if (fallback) {
|
|
71
|
+
return fallback;
|
|
72
|
+
}
|
|
73
|
+
return /* @__PURE__ */ jsx2(DefaultErrorFallback, { error, onReset: this.reset });
|
|
74
|
+
}
|
|
75
|
+
return children;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
function DefaultErrorFallback({ error, onReset }) {
|
|
79
|
+
const isDev = process.env.NODE_ENV === "development";
|
|
80
|
+
return /* @__PURE__ */ jsx2(
|
|
81
|
+
"div",
|
|
82
|
+
{
|
|
83
|
+
style: {
|
|
84
|
+
padding: 24,
|
|
85
|
+
display: "flex",
|
|
86
|
+
flexDirection: "column",
|
|
87
|
+
alignItems: "center",
|
|
88
|
+
justifyContent: "center",
|
|
89
|
+
minHeight: "100vh",
|
|
90
|
+
backgroundColor: "#f5f5f5"
|
|
91
|
+
},
|
|
92
|
+
children: /* @__PURE__ */ jsxs(
|
|
93
|
+
"div",
|
|
94
|
+
{
|
|
95
|
+
style: {
|
|
96
|
+
maxWidth: 600,
|
|
97
|
+
padding: 32,
|
|
98
|
+
backgroundColor: "#fff",
|
|
99
|
+
borderRadius: 8,
|
|
100
|
+
boxShadow: "0 2px 8px rgba(0,0,0,0.1)"
|
|
101
|
+
},
|
|
102
|
+
children: [
|
|
103
|
+
/* @__PURE__ */ jsx2("h1", { style: { color: "#ff4d4f", marginBottom: 16 }, children: "\u9875\u9762\u51FA\u9519\u4E86" }),
|
|
104
|
+
/* @__PURE__ */ jsx2("p", { style: { color: "#666", marginBottom: 16 }, children: "\u62B1\u6B49\uFF0C\u9875\u9762\u9047\u5230\u4E86\u4E00\u4E9B\u95EE\u9898\u3002\u8BF7\u5C1D\u8BD5\u5237\u65B0\u9875\u9762\u6216\u8054\u7CFB\u7BA1\u7406\u5458\u3002" }),
|
|
105
|
+
isDev && /* @__PURE__ */ jsxs(
|
|
106
|
+
"details",
|
|
107
|
+
{
|
|
108
|
+
style: {
|
|
109
|
+
marginBottom: 16,
|
|
110
|
+
padding: 12,
|
|
111
|
+
backgroundColor: "#fff2f0",
|
|
112
|
+
borderRadius: 4,
|
|
113
|
+
border: "1px solid #ffccc7"
|
|
114
|
+
},
|
|
115
|
+
children: [
|
|
116
|
+
/* @__PURE__ */ jsx2("summary", { style: { cursor: "pointer", fontWeight: "bold" }, children: "\u9519\u8BEF\u8BE6\u60C5\uFF08\u4EC5\u5F00\u53D1\u73AF\u5883\u53EF\u89C1\uFF09" }),
|
|
117
|
+
/* @__PURE__ */ jsxs(
|
|
118
|
+
"pre",
|
|
119
|
+
{
|
|
120
|
+
style: {
|
|
121
|
+
marginTop: 8,
|
|
122
|
+
padding: 8,
|
|
123
|
+
backgroundColor: "#fff",
|
|
124
|
+
borderRadius: 4,
|
|
125
|
+
overflow: "auto",
|
|
126
|
+
fontSize: 12
|
|
127
|
+
},
|
|
128
|
+
children: [
|
|
129
|
+
error.message,
|
|
130
|
+
"\n\n",
|
|
131
|
+
error.stack
|
|
132
|
+
]
|
|
133
|
+
}
|
|
134
|
+
)
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
),
|
|
138
|
+
/* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: 8 }, children: [
|
|
139
|
+
/* @__PURE__ */ jsx2(
|
|
140
|
+
"button",
|
|
141
|
+
{
|
|
142
|
+
onClick: onReset,
|
|
143
|
+
style: {
|
|
144
|
+
padding: "8px 16px",
|
|
145
|
+
backgroundColor: "#1890ff",
|
|
146
|
+
color: "#fff",
|
|
147
|
+
border: "none",
|
|
148
|
+
borderRadius: 4,
|
|
149
|
+
cursor: "pointer"
|
|
150
|
+
},
|
|
151
|
+
children: "\u91CD\u8BD5"
|
|
152
|
+
}
|
|
153
|
+
),
|
|
154
|
+
/* @__PURE__ */ jsx2(
|
|
155
|
+
"button",
|
|
156
|
+
{
|
|
157
|
+
onClick: () => window.location.reload(),
|
|
158
|
+
style: {
|
|
159
|
+
padding: "8px 16px",
|
|
160
|
+
backgroundColor: "#fff",
|
|
161
|
+
color: "#666",
|
|
162
|
+
border: "1px solid #d9d9d9",
|
|
163
|
+
borderRadius: 4,
|
|
164
|
+
cursor: "pointer"
|
|
165
|
+
},
|
|
166
|
+
children: "\u5237\u65B0\u9875\u9762"
|
|
167
|
+
}
|
|
168
|
+
)
|
|
169
|
+
] })
|
|
170
|
+
]
|
|
171
|
+
}
|
|
172
|
+
)
|
|
173
|
+
}
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// 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
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
186
|
+
function DefaultLoading() {
|
|
187
|
+
return /* @__PURE__ */ jsx3(
|
|
188
|
+
"div",
|
|
189
|
+
{
|
|
190
|
+
style: {
|
|
191
|
+
display: "flex",
|
|
192
|
+
alignItems: "center",
|
|
193
|
+
justifyContent: "center",
|
|
194
|
+
height: "100vh",
|
|
195
|
+
fontSize: 16,
|
|
196
|
+
color: "#999"
|
|
197
|
+
},
|
|
198
|
+
children: "\u52A0\u8F7D\u4E2D..."
|
|
199
|
+
}
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
function composeProviders(providers) {
|
|
203
|
+
const sortedProviders = [...providers].sort(
|
|
204
|
+
(a, b) => (a.order ?? 100) - (b.order ?? 100)
|
|
205
|
+
);
|
|
206
|
+
return function ComposedProviders({ children }) {
|
|
207
|
+
return sortedProviders.reduceRight((acc, { component: Provider, props }) => {
|
|
208
|
+
return /* @__PURE__ */ jsx3(Provider, { ...props, children: acc });
|
|
209
|
+
}, children);
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
function RootProvider({ config, children }) {
|
|
213
|
+
const {
|
|
214
|
+
appName = "app",
|
|
215
|
+
router,
|
|
216
|
+
basename = "/",
|
|
217
|
+
strictMode = true,
|
|
218
|
+
antd = { enabled: true },
|
|
219
|
+
providers = [],
|
|
220
|
+
lifecycle
|
|
221
|
+
} = config;
|
|
222
|
+
const appContextValue = {
|
|
223
|
+
appName,
|
|
224
|
+
basename,
|
|
225
|
+
isDev: process.env.NODE_ENV === "development",
|
|
226
|
+
env: typeof process !== "undefined" ? process.env : {}
|
|
227
|
+
};
|
|
228
|
+
const allProviders = [
|
|
229
|
+
// 应用上下文 Provider(最外层)
|
|
230
|
+
{
|
|
231
|
+
component: AppContextProvider,
|
|
232
|
+
props: { value: appContextValue },
|
|
233
|
+
order: 0
|
|
234
|
+
},
|
|
235
|
+
// Ant Design ConfigProvider
|
|
236
|
+
...antd.enabled !== false ? [
|
|
237
|
+
{
|
|
238
|
+
component: ConfigProvider,
|
|
239
|
+
props: {
|
|
240
|
+
locale: antd.locale || zhCN,
|
|
241
|
+
theme: antd.theme,
|
|
242
|
+
...antd.configProvider
|
|
243
|
+
},
|
|
244
|
+
order: 10
|
|
245
|
+
}
|
|
246
|
+
] : [],
|
|
247
|
+
// 用户自定义 Providers
|
|
248
|
+
...providers.map((p) => ({ ...p, order: p.order ?? 50 }))
|
|
249
|
+
];
|
|
250
|
+
const ComposedProviders = composeProviders(allProviders);
|
|
251
|
+
const content = router ? /* @__PURE__ */ jsx3(Suspense, { fallback: /* @__PURE__ */ jsx3(DefaultLoading, {}), children: /* @__PURE__ */ jsx3(RouterProvider, { router }) }) : children;
|
|
252
|
+
const app = /* @__PURE__ */ jsx3(ErrorBoundary, { onError: lifecycle?.onError, children: /* @__PURE__ */ jsx3(ComposedProviders, { children: content }) });
|
|
253
|
+
if (strictMode) {
|
|
254
|
+
return /* @__PURE__ */ jsx3(StrictMode, { children: app });
|
|
255
|
+
}
|
|
256
|
+
return app;
|
|
257
|
+
}
|
|
258
|
+
function createProvider(component, props, order) {
|
|
259
|
+
return {
|
|
260
|
+
component,
|
|
261
|
+
props,
|
|
262
|
+
order
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// src/runtime/bootstrap.tsx
|
|
267
|
+
import { createRoot } from "react-dom/client";
|
|
268
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
269
|
+
var root = null;
|
|
270
|
+
async function resolveAppConfig(config) {
|
|
271
|
+
if (config.router || !config.conventionalRoutes) {
|
|
272
|
+
return config;
|
|
273
|
+
}
|
|
274
|
+
try {
|
|
275
|
+
const routesModule = await import("@ywkf/routes");
|
|
276
|
+
const createRouter = routesModule.createRouter || routesModule.default?.createRouter;
|
|
277
|
+
if (typeof createRouter === "function") {
|
|
278
|
+
const router = createRouter(config.basename);
|
|
279
|
+
console.log("[ywkf] \u5DF2\u81EA\u52A8\u6CE8\u5165\u7EA6\u5B9A\u5F0F\u8DEF\u7531");
|
|
280
|
+
return { ...config, router };
|
|
281
|
+
} else {
|
|
282
|
+
console.warn("[ywkf] @ywkf/routes \u672A\u5BFC\u51FA createRouter \u51FD\u6570");
|
|
283
|
+
}
|
|
284
|
+
} catch (error) {
|
|
285
|
+
console.error("[ywkf] \u52A0\u8F7D\u7EA6\u5B9A\u5F0F\u8DEF\u7531\u5931\u8D25:", error);
|
|
286
|
+
console.warn("[ywkf] \u8BF7\u786E\u4FDD\u5DF2\u542F\u7528\u7EA6\u5B9A\u5F0F\u8DEF\u7531\u4E14 src/pages \u76EE\u5F55\u5B58\u5728");
|
|
287
|
+
}
|
|
288
|
+
return config;
|
|
289
|
+
}
|
|
290
|
+
async function bootstrap(config) {
|
|
291
|
+
const { rootId = "root", lifecycle } = config;
|
|
292
|
+
const resolvedConfig = await resolveAppConfig(config);
|
|
293
|
+
if (lifecycle?.onBeforeMount) {
|
|
294
|
+
await lifecycle.onBeforeMount();
|
|
295
|
+
}
|
|
296
|
+
const rootElement = document.getElementById(rootId);
|
|
297
|
+
if (!rootElement) {
|
|
298
|
+
throw new Error(`\u627E\u4E0D\u5230\u6839\u5143\u7D20 #${rootId}`);
|
|
299
|
+
}
|
|
300
|
+
root = createRoot(rootElement);
|
|
301
|
+
root.render(/* @__PURE__ */ jsx4(RootProvider, { config: resolvedConfig }));
|
|
302
|
+
if (lifecycle?.onMounted) {
|
|
303
|
+
setTimeout(() => {
|
|
304
|
+
lifecycle.onMounted?.();
|
|
305
|
+
}, 0);
|
|
306
|
+
}
|
|
307
|
+
if (lifecycle?.onUnmount) {
|
|
308
|
+
window.addEventListener("beforeunload", () => {
|
|
309
|
+
lifecycle.onUnmount?.();
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
function unmount() {
|
|
314
|
+
if (root) {
|
|
315
|
+
root.unmount();
|
|
316
|
+
root = null;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
function createMicroApp(getConfig) {
|
|
320
|
+
let microRoot = null;
|
|
321
|
+
return {
|
|
322
|
+
/**
|
|
323
|
+
* 微前端 bootstrap 生命周期
|
|
324
|
+
*/
|
|
325
|
+
async bootstrap() {
|
|
326
|
+
console.log("[MicroApp] bootstrap");
|
|
327
|
+
},
|
|
328
|
+
/**
|
|
329
|
+
* 微前端 mount 生命周期
|
|
330
|
+
*/
|
|
331
|
+
async mount(props) {
|
|
332
|
+
console.log("[MicroApp] mount", props);
|
|
333
|
+
const config = getConfig(props);
|
|
334
|
+
const resolvedConfig = await resolveAppConfig(config);
|
|
335
|
+
const container = props?.masterProps?.container;
|
|
336
|
+
const rootId = resolvedConfig.rootId || "root";
|
|
337
|
+
const rootElement = container ? container.querySelector(`#${rootId}`) : document.getElementById(rootId);
|
|
338
|
+
if (!rootElement) {
|
|
339
|
+
throw new Error(`[MicroApp] \u627E\u4E0D\u5230\u6839\u5143\u7D20 #${rootId}`);
|
|
340
|
+
}
|
|
341
|
+
if (resolvedConfig.lifecycle?.onBeforeMount) {
|
|
342
|
+
await resolvedConfig.lifecycle.onBeforeMount();
|
|
343
|
+
}
|
|
344
|
+
microRoot = createRoot(rootElement);
|
|
345
|
+
microRoot.render(/* @__PURE__ */ jsx4(RootProvider, { config: resolvedConfig }));
|
|
346
|
+
if (resolvedConfig.lifecycle?.onMounted) {
|
|
347
|
+
setTimeout(() => {
|
|
348
|
+
resolvedConfig.lifecycle?.onMounted?.();
|
|
349
|
+
}, 0);
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
/**
|
|
353
|
+
* 微前端 unmount 生命周期
|
|
354
|
+
*/
|
|
355
|
+
async unmount(props) {
|
|
356
|
+
console.log("[MicroApp] unmount", props);
|
|
357
|
+
const config = getConfig(props);
|
|
358
|
+
if (config.lifecycle?.onUnmount) {
|
|
359
|
+
config.lifecycle.onUnmount();
|
|
360
|
+
}
|
|
361
|
+
if (microRoot) {
|
|
362
|
+
microRoot.unmount();
|
|
363
|
+
microRoot = null;
|
|
364
|
+
}
|
|
365
|
+
},
|
|
366
|
+
/**
|
|
367
|
+
* 微前端 update 生命周期(可选)
|
|
368
|
+
*/
|
|
369
|
+
async update(props) {
|
|
370
|
+
console.log("[MicroApp] update", props);
|
|
371
|
+
}
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
function isMicroAppEnv() {
|
|
375
|
+
if (window.__POWERED_BY_QIANKUN__) {
|
|
376
|
+
return true;
|
|
377
|
+
}
|
|
378
|
+
if (window.__GARFISH__) {
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
return false;
|
|
382
|
+
}
|
|
383
|
+
function getMicroAppPublicPath() {
|
|
384
|
+
if (window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__) {
|
|
385
|
+
return window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
|
|
386
|
+
}
|
|
387
|
+
return "/";
|
|
388
|
+
}
|
|
389
|
+
export {
|
|
390
|
+
AppContext,
|
|
391
|
+
AppContextProvider,
|
|
392
|
+
ErrorBoundary,
|
|
393
|
+
RootProvider,
|
|
394
|
+
bootstrap,
|
|
395
|
+
createMicroApp,
|
|
396
|
+
createProvider,
|
|
397
|
+
getMicroAppPublicPath,
|
|
398
|
+
isMicroAppEnv,
|
|
399
|
+
unmount,
|
|
400
|
+
useApp,
|
|
401
|
+
useAppName,
|
|
402
|
+
useBasename,
|
|
403
|
+
useEnv,
|
|
404
|
+
useIsDev
|
|
405
|
+
};
|
|
406
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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 * 判断是否在微前端环境中运行\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":"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","names":["jsx","jsx","jsx"]}
|