@fulgurjs/federation 5.2.5 → 5.3.1
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/CHANGELOG.md +23 -0
- package/DESIGN.md +7 -0
- package/README.en.md +86 -4
- package/README.md +125 -3
- package/dist/bridge-app-react.cjs +185 -0
- package/dist/bridge-app-react.d.cts +37 -0
- package/dist/bridge-app-react.d.ts +37 -0
- package/dist/bridge-app-react.js +115 -0
- package/dist/bridge-app-vue.cjs +111 -0
- package/dist/bridge-app-vue.d.cts +34 -0
- package/dist/bridge-app-vue.d.ts +34 -0
- package/dist/bridge-app-vue.js +51 -0
- package/dist/bridge-core-6uLJiMVa.d.ts +42 -0
- package/dist/bridge-core.cjs +232 -0
- package/dist/bridge-core.d.cts +51 -0
- package/dist/bridge-core.d.ts +51 -0
- package/dist/bridge-core.js +21 -0
- package/dist/bridge-errors.cjs +114 -0
- package/dist/bridge-errors.d.cts +36 -0
- package/dist/bridge-errors.d.ts +36 -0
- package/dist/bridge-errors.js +15 -0
- package/dist/bridge-host-react-C55RmGll.d.ts +35 -0
- package/dist/bridge-host-react.cjs +400 -0
- package/dist/bridge-host-react.d.cts +45 -0
- package/dist/bridge-host-react.d.ts +45 -0
- package/dist/bridge-host-react.js +183 -0
- package/dist/bridge-host-vue-BAxDKqGH.d.ts +32 -0
- package/dist/bridge-host-vue.cjs +437 -0
- package/dist/bridge-host-vue.d.cts +39 -0
- package/dist/bridge-host-vue.d.ts +39 -0
- package/dist/bridge-host-vue.js +214 -0
- package/dist/bridge-react.d.ts +12 -0
- package/dist/bridge-react.js +3 -0
- package/dist/bridge-vue.d.ts +8 -0
- package/dist/bridge-vue.js +3 -0
- package/dist/bridge.d.ts +16 -0
- package/dist/bridge.js +5 -0
- package/dist/chunk-DH2QMM4Y.js +76 -0
- package/dist/chunk-LE2G23E7.js +122 -0
- package/dist/chunk-MMXKQN2H.js +210 -0
- package/dist/chunk-OF2JCXTZ.js +15 -0
- package/dist/chunk-TOT3P7AK.js +1229 -0
- package/dist/chunk-TSYLDY6H.js +64 -0
- package/dist/chunk-X4F2BHNM.js +179 -0
- package/dist/context.js +8 -64
- package/dist/index.cjs +139 -13
- package/dist/index.js +139 -13
- package/dist/react.d.ts +47 -2
- package/dist/react.js +2 -0
- package/dist/runtime-entry.d.ts +44 -2
- package/dist/runtime-entry.js +1 -1
- package/dist/runtime.js +19 -19
- package/dist/vue.js +2 -0
- package/docs/webpack-mf-/345/257/271/347/205/247/344/270/216/347/274/272/345/217/243.md +1 -1
- package/docs//350/277/201/347/247/273/346/214/207/345/215/227.md +1 -1
- package/examples/README.en.md +20 -0
- package/examples/README.md +20 -0
- package/examples/bridge/README.md +36 -0
- package/examples/bridge/react-host/README.md +23 -0
- package/examples/bridge/react-host/fulgurjs.config.ts +20 -0
- package/examples/bridge/react-host/index.html +11 -0
- package/examples/bridge/react-host/package-lock.json +2457 -0
- package/examples/bridge/react-host/package.json +24 -0
- package/examples/bridge/react-host/src/env.d.ts +7 -0
- package/examples/bridge/react-host/src/host-session.ts +26 -0
- package/examples/bridge/react-host/src/main.tsx +62 -0
- package/examples/bridge/react-host/tsconfig.json +13 -0
- package/examples/bridge/react-host/vite.config.ts +9 -0
- package/examples/bridge/react-remote/README.md +20 -0
- package/examples/bridge/react-remote/fulgurjs.config.ts +17 -0
- package/examples/bridge/react-remote/index.html +11 -0
- package/examples/bridge/react-remote/package-lock.json +2382 -0
- package/examples/bridge/react-remote/package.json +24 -0
- package/examples/bridge/react-remote/src/bridge.tsx +66 -0
- package/examples/bridge/react-remote/src/env.d.ts +7 -0
- package/examples/bridge/react-remote/src/main.tsx +7 -0
- package/examples/bridge/react-remote/tsconfig.json +13 -0
- package/examples/bridge/react-remote/vite.config.ts +9 -0
- package/examples/bridge/vue-host/README.md +24 -0
- package/examples/bridge/vue-host/fulgurjs.config.ts +22 -0
- package/examples/bridge/vue-host/index.html +11 -0
- package/examples/bridge/vue-host/package-lock.json +1885 -0
- package/examples/bridge/vue-host/package.json +24 -0
- package/examples/bridge/vue-host/src/App.vue +70 -0
- package/examples/bridge/vue-host/src/env.d.ts +7 -0
- package/examples/bridge/vue-host/src/host-session.ts +29 -0
- package/examples/bridge/vue-host/src/main.ts +4 -0
- package/examples/bridge/vue-host/tsconfig.json +13 -0
- package/examples/bridge/vue-host/vite.config.ts +9 -0
- package/examples/bridge/vue-remote/README.md +19 -0
- package/examples/bridge/vue-remote/fulgurjs.config.ts +16 -0
- package/examples/bridge/vue-remote/index.html +11 -0
- package/examples/bridge/vue-remote/package-lock.json +1856 -0
- package/examples/bridge/vue-remote/package.json +21 -0
- package/examples/bridge/vue-remote/src/App.vue +12 -0
- package/examples/bridge/vue-remote/src/bridge.ts +57 -0
- package/examples/bridge/vue-remote/src/env.d.ts +7 -0
- package/examples/bridge/vue-remote/src/main.ts +15 -0
- package/examples/bridge/vue-remote/tsconfig.json +13 -0
- package/examples/bridge/vue-remote/vite.config.ts +9 -0
- package/package.json +43 -2
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import fs from "fs";
|
|
|
8
8
|
import path from "path";
|
|
9
9
|
|
|
10
10
|
// src/version.ts
|
|
11
|
-
var RUNTIME_VERSION = "5.
|
|
11
|
+
var RUNTIME_VERSION = "5.3.1";
|
|
12
12
|
|
|
13
13
|
// src/dev-cors.ts
|
|
14
14
|
function normalizeDevCorsOrigins(input) {
|
|
@@ -53,7 +53,7 @@ var RESOLVED = {
|
|
|
53
53
|
remoteEntry: "virtual:fulgurjs-remote-entry",
|
|
54
54
|
sharedFacade: (name) => `virtual:fulgurjs-shared:${name}`,
|
|
55
55
|
sharedNsFacade: (name) => `virtual:fulgurjs-shared-ns:${name}`,
|
|
56
|
-
/** CJS require(<shared>)
|
|
56
|
+
/** CJS require(<shared>) 垫片:同步形态(getLoadedShare 快照 + 本体直连),保持 require 调用语义 */
|
|
57
57
|
cjsNsFacade: (name) => `virtual:fulgurjs-cjs-ns:${name}`
|
|
58
58
|
};
|
|
59
59
|
function joinUrl(base, file) {
|
|
@@ -638,6 +638,7 @@ function genSharedFacade(specifier, exportNames, dynamic = false) {
|
|
|
638
638
|
if (!dynamic) {
|
|
639
639
|
if (names.length === 0) {
|
|
640
640
|
return [
|
|
641
|
+
`export const __fulgurjs_facadeTag = 1;`,
|
|
641
642
|
`import * as __fulgurjs_facade from ${JSON.stringify(specifier)};`,
|
|
642
643
|
`export * from ${JSON.stringify(specifier)};`,
|
|
643
644
|
`export default __fulgurjs_facade.default ?? __fulgurjs_facade;`,
|
|
@@ -645,6 +646,7 @@ function genSharedFacade(specifier, exportNames, dynamic = false) {
|
|
|
645
646
|
].join("\n");
|
|
646
647
|
}
|
|
647
648
|
return [
|
|
649
|
+
`export const __fulgurjs_facadeTag = 1;`,
|
|
648
650
|
`import * as __fulgurjs_facade from ${JSON.stringify(specifier)};`,
|
|
649
651
|
...names.map((n) => `export const ${n} = __fulgurjs_facade[${JSON.stringify(n)}];`),
|
|
650
652
|
`export default __fulgurjs_facade.default ?? __fulgurjs_facade;`,
|
|
@@ -683,6 +685,31 @@ function genSharedNsFacade(item, loadShareCall, exportNames, dynamic = false) {
|
|
|
683
685
|
lines.push("");
|
|
684
686
|
return lines.join("\n");
|
|
685
687
|
}
|
|
688
|
+
function genCjsNsFacade(item, exportNames, importTarget) {
|
|
689
|
+
const opts = [
|
|
690
|
+
`shareScope: ${JSON.stringify(item.shareScope)}`,
|
|
691
|
+
`shareKey: ${JSON.stringify(item.shareKey)}`,
|
|
692
|
+
...item.requiredVersion !== false ? [`requiredVersion: ${JSON.stringify(item.requiredVersion)}`] : [],
|
|
693
|
+
...item.singleton ? ["singleton: true"] : []
|
|
694
|
+
];
|
|
695
|
+
const lines = [
|
|
696
|
+
`import { getLoadedShare as __fulgurjs_gls, unwrapDefault as __fulgurjsU } from "virtual:fulgurjs-runtime";`,
|
|
697
|
+
// importTarget 为 load 期解析出的绝对 id(proxy 虚拟 id 上下文里裸包名无法 node 解析);
|
|
698
|
+
// 兜底保留裸包名(与命名空间门面同语义,无 proxy 载体时可解析)
|
|
699
|
+
`import * as __fulgurjs_local from ${JSON.stringify(importTarget ?? item.import)};`,
|
|
700
|
+
`const __fulgurjs_m = __fulgurjs_gls(${JSON.stringify(item.shareKey)}, { ${opts.join(", ")} }) ?? __fulgurjs_local;`,
|
|
701
|
+
`const __fulgurjs_d = __fulgurjsU(__fulgurjs_m);`,
|
|
702
|
+
`export default __fulgurjs_d;`
|
|
703
|
+
];
|
|
704
|
+
const seen = /* @__PURE__ */ new Set(["default"]);
|
|
705
|
+
for (const name of exportNames) {
|
|
706
|
+
if (seen.has(name) || !/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name)) continue;
|
|
707
|
+
seen.add(name);
|
|
708
|
+
lines.push(`export const ${name} = __fulgurjs_d[${JSON.stringify(name)}];`);
|
|
709
|
+
}
|
|
710
|
+
lines.push("");
|
|
711
|
+
return lines.join("\n");
|
|
712
|
+
}
|
|
686
713
|
function genBindingFacade(item, bindings, loadShareCall, dynamic = false) {
|
|
687
714
|
const lines = [
|
|
688
715
|
dynamic ? `const { loadShare: __fulgurjs_loadShare, unwrapDefault: __fulgurjsU } = await import("virtual:fulgurjs-runtime");` : `import { loadShare as __fulgurjs_loadShare, unwrapDefault as __fulgurjsU } from "virtual:fulgurjs-runtime";`,
|
|
@@ -851,6 +878,9 @@ function genReactRefreshShim() {
|
|
|
851
878
|
`export const createSignatureFunctionForTransform = __fulgurjs_rr.createSignatureFunctionForTransform;`,
|
|
852
879
|
`export const registerExportsForReactRefresh = __fulgurjs_rr.registerExportsForReactRefresh;`,
|
|
853
880
|
`export const validateRefreshBoundaryAndEnqueueUpdate = __fulgurjs_rr.validateRefreshBoundaryAndEnqueueUpdate;`,
|
|
881
|
+
// plugin-react ≥5 的转换产物经 getRefreshReg(文件路径) 取每文件注册器——必须转发,
|
|
882
|
+
// 缺失时宿主自身 JSX 文件报 "RefreshRuntime.getRefreshReg is not a function"(桥接轮实测)
|
|
883
|
+
`export const getRefreshReg = __fulgurjs_rr.getRefreshReg;`,
|
|
854
884
|
`export const __hmr_import = __fulgurjs_rr.__hmr_import;`,
|
|
855
885
|
`export default __fulgurjs_rr.default ?? { injectIntoGlobalHook: __fulgurjs_rr.injectIntoGlobalHook };`,
|
|
856
886
|
``
|
|
@@ -984,18 +1014,38 @@ function genApiFacade(framework = "vue") {
|
|
|
984
1014
|
];
|
|
985
1015
|
const vueBody = [
|
|
986
1016
|
"import { createRemoteComponent, createHostPages as __fulgurjs_chp } from '@fulgurjs/federation/internal/vue-adapter.js';",
|
|
1017
|
+
"import { defineBridgeApp } from '@fulgurjs/federation/internal/bridge-app-vue.js';",
|
|
987
1018
|
"export const remoteComponent = createRemoteComponent(__fulgurjs_loadRemote);",
|
|
988
|
-
"export const createHostPages = (options) => __fulgurjs_chp(options, __fulgurjs_loadRemote);"
|
|
1019
|
+
"export const createHostPages = (options) => __fulgurjs_chp(options, __fulgurjs_loadRemote);",
|
|
1020
|
+
"export { defineBridgeApp };"
|
|
989
1021
|
];
|
|
990
1022
|
const reactBody = [
|
|
991
1023
|
"import { createRemoteComponent, createUseLoadRemote, RemoteErrorBoundary, createReactHostPages as __fulgurjs_rhp } from '@fulgurjs/federation/internal/react-adapter.js';",
|
|
1024
|
+
"import { defineBridgeApp } from '@fulgurjs/federation/internal/bridge-app-react.js';",
|
|
992
1025
|
"export const remoteComponent = createRemoteComponent(__fulgurjs_loadRemote);",
|
|
993
1026
|
"export const useLoadRemote = createUseLoadRemote(__fulgurjs_loadRemote);",
|
|
994
1027
|
"export { RemoteErrorBoundary };",
|
|
995
|
-
"export const createReactHostPages = (options) => __fulgurjs_rhp(options, __fulgurjs_loadRemote);"
|
|
1028
|
+
"export const createReactHostPages = (options) => __fulgurjs_rhp(options, __fulgurjs_loadRemote);",
|
|
1029
|
+
"export { defineBridgeApp };"
|
|
996
1030
|
];
|
|
997
1031
|
return [...head, ...framework === "react" ? reactBody : vueBody, ""].join("\n");
|
|
998
1032
|
}
|
|
1033
|
+
function genBridgeFacade(framework = "both") {
|
|
1034
|
+
const head = [
|
|
1035
|
+
"export { provideAppContext, getAppContext, requireAppContext, clearAppContext } from '@fulgurjs/federation/internal/context.js';",
|
|
1036
|
+
"import { loadRemote as __fulgurjs_loadRemote } from 'virtual:fulgurjs-runtime-proxy';"
|
|
1037
|
+
];
|
|
1038
|
+
const vueBody = [
|
|
1039
|
+
"import { createVueBridgeApp as __fulgurjs_cvb } from '@fulgurjs/federation/internal/bridge-host-vue.js';",
|
|
1040
|
+
"export const createVueBridgeApp = __fulgurjs_cvb(__fulgurjs_loadRemote);"
|
|
1041
|
+
];
|
|
1042
|
+
const reactBody = [
|
|
1043
|
+
"import { createReactBridgeApp as __fulgurjs_crb } from '@fulgurjs/federation/internal/bridge-host-react.js';",
|
|
1044
|
+
"export const createReactBridgeApp = __fulgurjs_crb(__fulgurjs_loadRemote);"
|
|
1045
|
+
];
|
|
1046
|
+
const body = framework === "vue" ? vueBody : framework === "react" ? reactBody : [...vueBody, ...reactBody];
|
|
1047
|
+
return [...head, ...body, ""].join("\n");
|
|
1048
|
+
}
|
|
999
1049
|
function genDevManifest(options, base) {
|
|
1000
1050
|
const b = base.endsWith("/") ? base : `${base}/`;
|
|
1001
1051
|
return {
|
|
@@ -1083,10 +1133,13 @@ function splitNamedImportBindings(inner) {
|
|
|
1083
1133
|
}
|
|
1084
1134
|
var ENTRY_FACADES = {
|
|
1085
1135
|
"@fulgurjs/federation/runtime": "virtual:fulgurjs-api-facade",
|
|
1086
|
-
"@fulgurjs/federation/react": "virtual:fulgurjs-api-facade-react"
|
|
1136
|
+
"@fulgurjs/federation/react": "virtual:fulgurjs-api-facade-react",
|
|
1137
|
+
"@fulgurjs/federation/bridge": "virtual:fulgurjs-api-facade-bridge",
|
|
1138
|
+
"@fulgurjs/federation/bridge/vue": "virtual:fulgurjs-api-facade-bridge-vue",
|
|
1139
|
+
"@fulgurjs/federation/bridge/react": "virtual:fulgurjs-api-facade-bridge-react"
|
|
1087
1140
|
};
|
|
1088
1141
|
async function rewriteRuntimeEntryImports(code, exposeTarget) {
|
|
1089
|
-
if (!code.includes("@fulgurjs/federation/runtime") && !code.includes("@fulgurjs/federation/react")) return null;
|
|
1142
|
+
if (!code.includes("@fulgurjs/federation/runtime") && !code.includes("@fulgurjs/federation/react") && !code.includes("@fulgurjs/federation/bridge")) return null;
|
|
1090
1143
|
await ensureLexer();
|
|
1091
1144
|
const [imports] = parse(code);
|
|
1092
1145
|
const out = new MagicString(code);
|
|
@@ -2128,7 +2181,7 @@ function syncViteCacheMarker(root, pluginVersion, log) {
|
|
|
2128
2181
|
}
|
|
2129
2182
|
|
|
2130
2183
|
// src/runtime-code.gen.ts
|
|
2131
|
-
var runtime_code_gen_default = 'var de=/^v?(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:-((?:[0-9A-Za-z-]+)(?:\\.[0-9A-Za-z-]+)*))?(?:\\+[0-9A-Za-z.-]+)?$/;function L(a){let c=de.exec(String(a).trim());return c?{major:Number(c[1]),minor:Number(c[2]??0),patch:Number(c[3]??0),pre:c[4]?c[4].split("."):[]}:null}function ge(a,c){if(a.length===0&&c.length===0)return 0;if(a.length===0)return 1;if(c.length===0)return-1;let l=Math.max(a.length,c.length);for(let o=0;o<l;o++){let d=a[o],y=c[o];if(d===void 0)return-1;if(y===void 0)return 1;let w=/^\\d+$/.test(d),b=/^\\d+$/.test(y);if(w&&b){let I=Number(d)-Number(y);if(I!==0)return I}else{if(w!==b)return w?-1:1;if(d!==y)return d<y?-1:1}}return 0}function O(a,c){let l=L(a),o=L(c);return!l||!o?a<c?-1:a>c?1:0:l.major!==o.major?l.major-o.major:l.minor!==o.minor?l.minor-o.minor:l.patch!==o.patch?l.patch-o.patch:ge(l.pre,o.pre)}var he=/^[a-z]+[+:-]/i;function j(a,c){if(c===!1||c==null||c==="")return!0;let l=String(c).trim();return!l||l==="*"||l==="latest"||he.test(l)?!0:l.split("||").some(o=>ye(a,o.trim()))}function ye(a,c){if(!c||c==="*")return!L(a)?.pre.length;let l=c.split(/\\s+-\\s+/);if(l.length===2){let y=l[0].trim(),w=l[1].trim();return!(!j(a,`>=${y}`)||!j(a,`<=${w}`))}let o=L(a);if(!o)return!1;let d=Se(c);if(d===null)return!0;for(let y of d)if(!Pe(o,a,y))return!1;return!(o.pre.length>0&&!d.some(y=>y.ver.pre.length>0)&&!d.some(w=>w.ver.major===o.major&&w.ver.minor===o.minor&&w.ver.patch===o.patch))}function Se(a){let c=[],l=a.trim().split(/\\s+/).filter(Boolean);if(l.length===0)return null;for(let o of l){let d=/^(>=|<=|>|<|=|\\^|~)?(.*)$/.exec(o);if(!d)return null;let y=d[1],w=d[2],b=Ee(y,w);if(b===null)return null;c.push(...b)}return c}function Ee(a,c){let l=we(c);if(!l)return null;let{ver:o,partial:d}=l;switch(a){case"^":{let y=Re(o);return y?[{op:">=",ver:o},{op:"<",ver:y}]:null}case"~":{let y=d>=2?{major:o.major,minor:o.minor+1,patch:0,pre:[]}:{major:o.major+1,minor:0,patch:0,pre:[]};return[{op:">=",ver:o},{op:"<",ver:y}]}case">=":return[{op:">=",ver:o}];case">":return d===1?[{op:">=",ver:{major:o.major+1,minor:0,patch:0,pre:[]}}]:d===2?[{op:">=",ver:{major:o.major,minor:o.minor+1,patch:0,pre:[]}}]:[{op:">",ver:o}];case"<":return d===1?[{op:"<",ver:{major:o.major,minor:0,patch:0,pre:[]}}]:d===2?[{op:"<",ver:{major:o.major,minor:o.minor,patch:0,pre:[]}}]:[{op:"<",ver:o}];case"<=":return[{op:"<=",ver:o}];case"=":case void 0:return d===1?[{op:">=",ver:o},{op:"<",ver:{major:o.major+1,minor:0,patch:0,pre:[]}}]:d===2?[{op:">=",ver:o},{op:"<",ver:{major:o.major,minor:o.minor+1,patch:0,pre:[]}}]:[{op:"=",ver:o}];default:return null}}function Re(a){return a.major>0?{major:a.major+1,minor:0,patch:0,pre:[]}:a.minor>0?{major:0,minor:a.minor+1,patch:0,pre:[]}:{major:0,minor:0,patch:a.patch+1,pre:[]}}function we(a){let c=a.replace(/^v/,"").trim();if(!c||c==="*"||c==="x"||c==="X")return{ver:{major:0,minor:0,patch:0,pre:[]},partial:0};let l=c.split("."),o=[],d=0;for(let b of l.slice(0,3))if(/^\\d+$/.test(b))o.push(Number(b)),d++;else{if(b==="x"||b==="X"||b==="*")break;break}let y=c.split("-"),w=y.length>1?y.slice(1).join("-").split("+")[0].split("."):[];return d===0&&w.length===0?{ver:{major:0,minor:0,patch:0,pre:[]},partial:0}:{ver:{major:o[0]??0,minor:o[1]??0,patch:o[2]??0,pre:w},partial:d}}function be(a,c){switch(c){case">=":return a>=0;case">":return a>0;case"<":return a<0;case"<=":return a<=0;case"=":return a===0}}function Pe(a,c,l){let o=`${a.major}.${a.minor}.${a.patch}`+(a.pre.length?`-${a.pre.join(".")}`:"");if(l.upper)return!(!(O(o,`${l.ver.major}.${l.ver.minor}.${l.ver.patch}`+(l.ver.pre.length?`-${l.ver.pre.join(".")}`:""))>=0)||!(O(o,`${l.upper.major}.${l.upper.minor}.${l.upper.patch}`)<0));let d=O(o,`${l.ver.major}.${l.ver.minor}.${l.ver.patch}`+(l.ver.pre.length?`-${l.ver.pre.join(".")}`:"")),y=be(d,l.op);return l.ver.pre.length>0&&a.pre.length===0&&(l.op===">"||l.op==="<")?!1:y}var S=class extends Error{code;details;constructor(c,l,o,d){super(`[fulgurjs:${c}] ${l}`,d),this.name="FgError",this.code=c,this.details=o}},E={REMOTE_LOAD_FAILED:"MFU-001",REMOTE_NAME_MISMATCH:"MFU-002",SHARE_STRICT_VERSION:"MFU-003",SHARE_NOT_AVAILABLE:"MFU-004",CONTAINER_REINIT_CONFLICT:"MFU-005",MODULE_NOT_EXPOSED:"MFU-006",PRELOAD_FAILED:"MFU-007",REMOTE_UNKNOWN:"MFU-008",EMPTY_EXPORTS:"MFU-009",SINGLETON_SKEW:"MFU-010",SETUP_INVALID_EXPORT:"MFU-011",SETUP_RUN_FAILED:"MFU-012",SETUP_SESSION_KEY_MISSING:"MFU-013",SETUP_RECURSION:"MFU-014"};var W="5.2.5";var $e="__fulgurjsSetup",_e="__FULGURJS_APP_CONFIG__",D=15e3,z=2,Me=5,ve=3e4,Ie=4e3,Te=.2;function Oe(){let a=Object.create(null),c=new Map,l=[],o=new Set,d=new Map,y=new Map,w=new WeakMap,b=new WeakMap,I={},Z=()=>{for(let e of l)try{e.init?.(I)}catch(r){console.warn("[fulgurjs] \\u8FD0\\u884C\\u65F6\\u6269\\u5C55\\u521D\\u59CB\\u5316\\u5931\\u8D25\\uFF0C\\u8BE5\\u6269\\u5C55\\u5C06\\u4E0D\\u53EF\\u7528\\uFF1A",e.name,r)}},U=new Map,k,Q=e=>{let r=U.get(e);return r||U.set(e,r={}),r},V=()=>globalThis[_e]??{};async function K(e,r,t,s){let i=u=>u instanceof S?u:new S(E.SETUP_RUN_FAILED,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e}" \\u7684 ${s} \\u521D\\u59CB\\u5316\\u5931\\u8D25\\u3002\n\\u539F\\u56E0\\uFF1A${String(u?.message??u)}\n\\u4FEE\\u6CD5\\uFF1A\\u68C0\\u67E5\\u5E76\\u4FEE\\u590D\\u8BE5 ${s} \\u51FD\\u6570\\u540E\\u91CD\\u65B0\\u52A0\\u8F7D\\uFF1B\\u5931\\u8D25\\u7F13\\u5B58\\u5DF2\\u6E05\\u9664\\uFF0C\\u53EF\\u4EE5\\u76F4\\u63A5\\u91CD\\u8BD5\\u3002`,{remote:e,phase:s},{cause:u});k=e;let n;try{n=r(t)}catch(u){throw i(u)}finally{k=void 0}try{await n}catch(u){throw i(u)}}async function ee(e,r,t,s){e.debug.setup="pending";try{if(e.manifestUrl)try{await F(`${e.name}/${t}`)}catch{}let i=await r.get(t),n=i?.default;if(typeof n!="function")throw new S(E.SETUP_INVALID_EXPORT,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 setup \\u6A21\\u5757 "${t}" \\u65E0\\u6CD5\\u521D\\u59CB\\u5316\\u3002\n\\u539F\\u56E0\\uFF1A\\u9ED8\\u8BA4\\u5BFC\\u51FA\\u7C7B\\u578B\\u4E3A ${i==null?String(i):typeof n}\\uFF0C\\u5E94\\u4E3A\\u51FD\\u6570\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5728 setup \\u6307\\u5411\\u7684\\u6587\\u4EF6\\u4E2D\\u9ED8\\u8BA4\\u5BFC\\u51FA\\u51FD\\u6570\\uFF0C\\u4F8B\\u5982 export default async function setup(context) { ... }\\uFF1B\\u5177\\u540D onSession \\u53EF\\u9009\\u3002`,{remote:e.name,module:t});if(i.onSession!==void 0&&typeof i.onSession!="function")throw new S(E.SETUP_INVALID_EXPORT,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 setup \\u6A21\\u5757 "${t}" \\u65E0\\u6CD5\\u521D\\u59CB\\u5316\\u3002\n\\u539F\\u56E0\\uFF1AonSession \\u5BFC\\u51FA\\u7C7B\\u578B\\u4E3A ${typeof i.onSession}\\uFF0C\\u5E94\\u4E3A\\u51FD\\u6570\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5C06 onSession \\u6539\\u4E3A\\u5177\\u540D\\u5BFC\\u51FA\\u7684\\u51FD\\u6570\\uFF0C\\u6216\\u5220\\u9664\\u8BE5\\u5BFC\\u51FA\\u3002`,{remote:e.name,module:t});s.setupExports=i,await K(e.name,n,{appContext:V(),signal:(s.controller??=new AbortController).signal},"setup"),e.debug.setup="ready"}catch(i){throw e.debug.setup="failed",s.setupExports=void 0,i}}async function re(e,r,t){let s=V(),i=s?.sessionKey;if(typeof i!="string"||i==="")throw new S(E.SETUP_SESSION_KEY_MISSING,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u58F0\\u660E\\u4E86 onSession\\uFF0C\\u4F46\\u5BBF\\u4E3B\\u5C1A\\u672A\\u63D0\\u4F9B\\u6709\\u6548\\u7684 AppContext.sessionKey\\u3002\n\\u539F\\u56E0\\uFF1A\\u5F53\\u524D\\u503C\\u4E3A ${i===void 0?"\\u7F3A\\u5931":JSON.stringify(i)}\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5BBF\\u4E3B\\u6BCF\\u6B21\\u767B\\u5F55\\u6216\\u91CD\\u767B\\u65F6\\u751F\\u6210\\u65B0\\u7684\\u975E\\u654F\\u611F\\u767B\\u5F55\\u4EE3\\u6B21 ID\\uFF0C\\u5E76\\u5728\\u52A0\\u8F7D\\u8FDC\\u7A0B\\u9875\\u9762\\u524D\\u8C03\\u7528 provideAppContext({ ..., sessionKey: \'\\u767B\\u5F55\\u4EE3\\u6B21 ID\' })\\uFF1B\\u4E0D\\u8981\\u4F7F\\u7528 token \\u539F\\u6587\\u3002`,{remote:e.name});if(r.sessionPromise&&r.sessionKey===i)return r.sessionPromise;r.controller?.abort();let n=new AbortController;r.controller=n,r.sessionKey=i;let u=r.sessionPromise?r.sessionPromise.catch(()=>{}):Promise.resolve(),p=(async()=>{await u,!n.signal.aborted&&await K(e.name,t,{appContext:s,sessionKey:i,signal:n.signal},"onSession")})();return r.sessionPromise=p,p.catch(()=>{r.sessionKey===i&&(r.sessionKey=void 0,r.sessionPromise=void 0)}),p}async function te(e,r){let t=r?.[$e];if(typeof t!="string"||t==="")return;let s=Q(e.name);s.setupPromise||(s.setupPromise=ee(e,r,t,s).catch(n=>{throw s.setupPromise=void 0,n})),await s.setupPromise;let i=s.setupExports?.onSession;typeof i=="function"&&await re(e,s,i)}function ne(){for(let e of U.values()){try{e.controller?.abort()}catch{}e.sessionKey=void 0,e.sessionPromise=void 0}}let A=e=>a[e]??=Object.create(null);function $(e){try{I.onRemoteError?.(e)}catch{}typeof window<"u"&&window.dispatchEvent(new CustomEvent("fulgurjs:error",{detail:e}))}function oe(e="default"){return A(e),a}function se(e,r,t,s,i={}){let n=A(e||"default"),u=Object.hasOwn(n,r)?n[r]:void 0,p=u&&typeof u=="object"?u:void 0;p||(p=Object.create(null),n[r]=p),!(Object.hasOwn(p,t)&&p[t])&&(p[t]={version:t,get:s,from:i.from??"unknown",eager:!!i.eager,loaded:!!i.loaded})}function ie(e){let r=(t,s,i)=>{if(t===void 0)return;if(!(typeof t=="number"&&(i?Number.isInteger(t)&&t>=0&&t<=10:Number.isFinite(t)&&t>0)))throw new Error(`[fulgurjs] \\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 ${s} \\u914D\\u7F6E\\u65E0\\u6548\\uFF1A\\u5F53\\u524D\\u4E3A ${String(t)}\\uFF0C\\u5E94\\u4E3A${i?" 0 \\u5230 10 \\u7684\\u6574\\u6570":"\\u5927\\u4E8E 0 \\u7684\\u6709\\u9650\\u6570\\u5B57"}\\u3002\\u8BF7\\u4FEE\\u6B63 registerRemote \\u914D\\u7F6E\\u3002`)};r(e.timeout,"timeout"),r(e.retries,"retries",!0),e.breaker&&(r(e.breaker.threshold,"breaker.threshold"),r(e.breaker.resetMs,"breaker.resetMs"))}function H(e){for(let r of e){ie(r);let t=c.get(r.name);c.set(r.name,{timeout:D,retries:z,...t,...r,breakerThreshold:r.breaker?.threshold??t?.breakerThreshold??Me,breakerResetMs:r.breaker?.resetMs??t?.breakerResetMs??ve,state:t?.state??"idle",breakerState:t?.breakerState??{fails:0,openUntil:0},entryInflight:t?.entryInflight??new Map,entryFailCounts:t?.entryFailCounts??new Map,debug:t?.debug??{entry:r.entry,status:"idle",setup:"none"}})}}function ae(e){H([e])}function ce(e){l.push(...e),Z()}async function le(e,r={}){let t=r.shareScope||"default",s=r.shareKey||e,n=A(t)[s]||{},u=Object.keys(n),p=r.requiredVersion,h=u.filter(f=>p===void 0||p===!1||j(f,p)),g;if(r.singleton&&u.length>0){let f=u.filter(m=>n[m].loaded);if(g=[...f.length?f:u].sort(O).pop(),!h.includes(g)){let m=n[g],v=`\\u73B0\\u8C61\\uFF1A\\u5171\\u4EAB\\u5355\\u4F8B "${s}" \\u7684\\u5B9E\\u9645\\u7248\\u672C\\u4E0D\\u6EE1\\u8DB3\\u5F53\\u524D\\u5E94\\u7528\\u8981\\u6C42\\u3002\n\\u539F\\u56E0\\uFF1A\\u5E94\\u7528\\u8981\\u6C42 ${p??"\\u4EFB\\u610F\\u7248\\u672C"}\\uFF0C\\u4F5C\\u7528\\u57DF\\u4E2D\\u6709 ${u.join("\\u3001")}\\uFF1B\\u4E3A\\u4FDD\\u8BC1\\u5168\\u9875\\u53EA\\u4F7F\\u7528\\u4E00\\u4E2A\\u5B9E\\u4F8B\\uFF0C\\u6700\\u7EC8\\u590D\\u7528 ${m.from} \\u63D0\\u4F9B\\u7684 ${g}\\u3002\n\\u5F71\\u54CD\\uFF1A\\u53EF\\u80FD\\u51FA\\u73B0\\u72B6\\u6001\\u4E0D\\u4E00\\u81F4\\u6216\\u8FD0\\u884C\\u9519\\u8BEF\\uFF0C\\u5177\\u4F53\\u53D6\\u51B3\\u4E8E\\u4E24\\u7AEF API \\u662F\\u5426\\u517C\\u5BB9\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u7EDF\\u4E00\\u5BBF\\u4E3B\\u4E0E\\u8FDC\\u7A0B\\u7684\\u4F9D\\u8D56\\u7248\\u672C\\uFF0C\\u6216\\u6838\\u5BF9\\u540E\\u8C03\\u6574 shared.requiredVersion\\uFF1B\\u82E5\\u5FC5\\u987B\\u62D2\\u7EDD\\u4E0D\\u517C\\u5BB9\\u7248\\u672C\\uFF0C\\u8BF7\\u542F\\u7528 strictVersion\\u3002`;if(r.strictVersion){let T=new S(E.SHARE_STRICT_VERSION,v,{shareKey:s,requiredVersion:p});throw $({remote:m.from,error:T}),T}let _=`${t}|${s}|${p??"*"}|${g}|${u.join(",")}`;o.has(_)||(o.add(_),console.warn(`[fulgurjs:MFU-010] ${v}`))}}else if(g=[...h].sort(O).pop(),!g){if(r.strictVersion){let m=new S(E.SHARE_STRICT_VERSION,`\\u73B0\\u8C61\\uFF1A\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${t}" \\u4E2D\\u627E\\u4E0D\\u5230\\u7B26\\u5408\\u8981\\u6C42\\u7684 "${s}"\\u3002\n\\u539F\\u56E0\\uFF1A\\u8981\\u6C42\\u7248\\u672C ${p}\\uFF0C\\u5F53\\u524D\\u53EF\\u7528\\u7248\\u672C\\u4E3A ${u.join("\\u3001")||"\\u65E0"}\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u7EDF\\u4E00\\u5BBF\\u4E3B\\u4E0E\\u8FDC\\u7A0B\\u7684\\u4F9D\\u8D56\\u7248\\u672C\\uFF0C\\u6216\\u4FEE\\u6B63 shared.requiredVersion\\u3002`);throw $({remote:s,error:m}),m}if(r.fallback)return r.fallback();let f=new S(E.SHARE_NOT_AVAILABLE,`\\u73B0\\u8C61\\uFF1A\\u65E0\\u6CD5\\u52A0\\u8F7D\\u5171\\u4EAB\\u4F9D\\u8D56 "${s}"\\u3002\n\\u539F\\u56E0\\uFF1A\\u4F5C\\u7528\\u57DF "${t}" \\u4E2D\\u6CA1\\u6709\\u7B26\\u5408 ${p??"\\u4EFB\\u610F\\u7248\\u672C"} \\u8981\\u6C42\\u7684\\u7248\\u672C\\uFF0C\\u4E14\\u672A\\u914D\\u7F6E\\u672C\\u5730\\u526F\\u672C\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5728\\u5BBF\\u4E3B\\u6216\\u8FDC\\u7A0B\\u6CE8\\u518C\\u8BE5\\u4F9D\\u8D56\\uFF0C\\u6216\\u4E3A shared \\u914D\\u7F6E\\u53EF\\u7528\\u7684\\u672C\\u5730\\u526F\\u672C\\u3002`,{shareKey:s,requiredVersion:p});throw $({remote:s,error:f}),f}let R=n[g];if(I.resolveShare){let f=await I.resolveShare({shareKey:s,shareScope:t,requiredVersion:p,picked:R,available:Object.values(n)});f&&(R=f)}return R.loaded=!0,R.get()}function q(e){try{let r=new URL(e,typeof location<"u"?location.href:"http://f.invalid");return r.protocol+"//"+r.host+r.pathname}catch{return String(e).replace(/[?#].*$/,"")}}function G(e,r,t){return new Promise((s,i)=>{let n=setTimeout(()=>i(new Error(`\\u7B49\\u5F85\\u8D85\\u8FC7 ${r} \\u6BEB\\u79D2\\uFF1A${t}`)),r);e.then(u=>{clearTimeout(n),s(u)},u=>{clearTimeout(n),i(u)})})}let ue=e=>new Promise(r=>setTimeout(r,e));function N(e,r){if(!e||typeof e.get!="function")throw new Error(`\\u8FDC\\u7A0B\\u5E94\\u7528 "${r.name}" \\u7684 remoteEntry \\u672A\\u5BFC\\u51FA\\u5BB9\\u5668\\u63A5\\u53E3\\u3002\\u8BF7\\u786E\\u8BA4\\u5165\\u53E3\\u5BFC\\u51FA\\u4E86 get()\\uFF0C\\u5E76\\u68C0\\u67E5\\u8BE5\\u5730\\u5740\\u662F\\u5426\\u8FD4\\u56DE\\u6B63\\u786E\\u7684\\u8054\\u90A6\\u5165\\u53E3 JS\\u3002`);if(e.name&&r.name&&e.name!==r.name){let t=`\\u8FDC\\u7A0B\\u5165\\u53E3\\u81EA\\u62A5\\u540D\\u79F0 "${e.name}" \\u4E0E\\u5BBF\\u4E3B\\u914D\\u7F6E\\u540D\\u79F0 "${r.name}" \\u4E0D\\u4E00\\u81F4\\u3002\\u8BF7\\u7EDF\\u4E00\\u4E24\\u4FA7 federation({ name }) \\u4E0E remotes \\u7684\\u540D\\u79F0\\u3002`;if(r.promise)console.warn(`[fulgurjs] ${t} \\u5F53\\u524D\\u662F\\u52A8\\u6001 Promise \\u8FDC\\u7A0B\\uFF0C\\u7EE7\\u7EED\\u52A0\\u8F7D\\u3002`);else throw Object.assign(new Error(t),{code:E.REMOTE_NAME_MISMATCH})}}async function J(e,r){let t=r.entryFailCounts.get(e)??0,s=t>0?`${e}${e.includes("?")?"&":"?"}fulgurjs_retry=${t}`:e,i=r.entryInflight.get(e),n=i??import(s);return i||(r.entryInflight.set(e,n),n.catch(()=>{r.entryInflight.delete(e),r.entryFailCounts.set(e,(r.entryFailCounts.get(e)??0)+1)})),G(n,r.timeout??D,`\\u52A0\\u8F7D\\u8FDC\\u7A0B\\u5165\\u53E3 ${q(e)}`)}async function X(e,r){let t=e.shareScope||"default";if(e.container){let n=b.get(e.container);if(n&&n!==t)throw new S(E.CONTAINER_REINIT_CONFLICT,`\\u8FDC\\u7A0B\\u5BB9\\u5668 "${e.name}" \\u5DF2\\u4F7F\\u7528\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${n}" \\u521D\\u59CB\\u5316\\uFF0C\\u4E0D\\u80FD\\u518D\\u4EE5 "${t}" \\u521D\\u59CB\\u5316\\u3002\\u8BF7\\u7EDF\\u4E00 shareScope \\u914D\\u7F6E\\u3002`);return e.container}if(e.containerPromise)return e.containerPromise;let s=e.breakerState;if(s.openUntil>Date.now()){let n=new S(E.REMOTE_LOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u8FDE\\u7EED\\u52A0\\u8F7D\\u5931\\u8D25\\uFF0C\\u7194\\u65AD\\u5668\\u5DF2\\u5F00\\u542F\\uFF1B\\u5C06\\u5728 ${new Date(s.openUntil).toISOString()} \\u540E\\u5141\\u8BB8\\u91CD\\u8BD5\\u3002\\u8BF7\\u5148\\u68C0\\u67E5\\u8FDC\\u7A0B\\u5165\\u53E3\\u670D\\u52A1\\u548C\\u7F51\\u7EDC\\u3002`,{remote:e.name});throw $({remote:e.name,error:n}),n}e.state="loading",e.debug.status="loading";let i=(async()=>{let n=[];if(e.promise)n.push(async()=>{let f=await G(e.promise(),e.timeout??D,`\\u89E3\\u6790\\u52A8\\u6001\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}"`),m=typeof f=="string"?await J(f,e):f;return N(m,e),m});else for(let f of[e.entry,...e.fallback??[]])n.push(async()=>{let m=await J(f,e);return N(m,e),m});let u,p,h=!1,g=r?.retries??e.retries??z;for(let f of n){for(let m=0;m<=g;m++){let v=performance.now();try{u=await f(),e.lastLoadMs=Math.round(performance.now()-v),e.debug.lastLoadMs=e.lastLoadMs,h=!0;break}catch(_){if(p=_,_?.code)throw _;m<g&&await ue(Math.min(Ie,200*2**m)*(1-Te*(1-2*Math.random())))}}if(h)break}if(!h||!u){let f=q(e.entry),m=[];throw/^https?:\\/\\//.test(e.entry)&&typeof location<"u"?(m.push(`1. \\u5728\\u6D4F\\u89C8\\u5668\\u6253\\u5F00 ${f}\\uFF0C\\u786E\\u8BA4\\u8FDC\\u7A0B\\u5F00\\u53D1\\u670D\\u52A1\\u5DF2\\u542F\\u52A8\\uFF0C\\u5E76\\u8FD4\\u56DE JS \\u800C\\u975E HTML\\u3002`),m.push("2. \\u6838\\u5BF9 federation({ remotes }) \\u4E2D\\u7684\\u5730\\u5740\\uFF1B\\u5F00\\u53D1\\u548C\\u751F\\u4EA7\\u5730\\u5740\\u53EF\\u4EE5\\u4E0D\\u540C\\u3002"),m.push("3. \\u82E5\\u8DE8\\u57DF\\uFF0C\\u68C0\\u67E5\\u8FDC\\u7A0B\\u5F00\\u53D1\\u670D\\u52A1\\u7684 server.cors \\u914D\\u7F6E\\u3002")):(m.push(`1. \\u5728\\u6D4F\\u89C8\\u5668\\u6253\\u5F00 ${f}\\uFF0C\\u786E\\u8BA4\\u8FDC\\u7A0B\\u5E94\\u7528\\u5DF2\\u90E8\\u7F72\\uFF0C\\u4E14\\u5165\\u53E3\\u8FD4\\u56DE JS\\u3002`),m.push("2. \\u68C0\\u67E5 Nginx/CDN \\u7684\\u5165\\u53E3\\u8DEF\\u5F84\\u6620\\u5C04\\uFF1B\\u8BE5\\u5730\\u5740\\u4E0D\\u80FD\\u56DE\\u9000\\u5230 index.html\\u3002")),new S(E.REMOTE_LOAD_FAILED,`\\u73B0\\u8C61\\uFF1A\\u65E0\\u6CD5\\u4ECE ${f} \\u52A0\\u8F7D\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}"\\u3002\n\\u539F\\u56E0\\uFF1A${String(p?.message??p)}\n\\u4FEE\\u6CD5\\uFF1A\n${m.join(`\n`)}`,{remote:e.name})}N(u,e);let R=b.get(u);if(R&&R!==t)throw new S(E.CONTAINER_REINIT_CONFLICT,`\\u8FDC\\u7A0B\\u5BB9\\u5668 "${e.name}" \\u5DF2\\u4F7F\\u7528\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${R}" \\u521D\\u59CB\\u5316\\uFF0C\\u4E0D\\u80FD\\u518D\\u4EE5 "${t}" \\u521D\\u59CB\\u5316\\u3002\\u8BF7\\u7EDF\\u4E00 shareScope \\u914D\\u7F6E\\u3002`);return typeof u.init=="function"&&await u.init(a),b.set(u,t),e.container=u,e.state="loaded",e.debug.status="loaded",s.fails=0,u})();e.containerPromise=i;try{return await i}catch(n){if(e.containerPromise=void 0,e.state="failed",e.debug.status="failed",e.debug.error=String(n?.message??n),s.fails+=1,s.fails>=e.breakerThreshold&&(s.openUntil=Date.now()+e.breakerResetMs,s.fails=0),n instanceof S)throw $({remote:e.name,error:n}),n;if(n?.code)throw $({remote:e.name,error:n}),n;let u=new S(E.REMOTE_LOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u52A0\\u8F7D\\u5931\\u8D25\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(n?.message??n)}\\u3002\\u8BF7\\u68C0\\u67E5\\u8FDC\\u7A0B\\u5165\\u53E3\\u3001\\u7F51\\u7EDC\\u53CA\\u5171\\u4EAB\\u4F9D\\u8D56\\u3002`,{remote:e.name});throw $({remote:e.name,error:u}),u}}function C(e){let r=e.indexOf("/");return r===-1?{remote:e,module:""}:{remote:e.slice(0,r),module:B(e.slice(r+1))}}function B(e){return e?e.startsWith(".")?e:`./${e}`:""}async function fe(e,r){let{remote:t,module:s}=C(e);if(s&&k===t)throw new S(E.SETUP_RECURSION,`\\u73B0\\u8C61\\uFF1A\\u52A0\\u8F7D "${e}" \\u65F6\\uFF0C\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u7684 setup/onSession \\u53C8\\u540C\\u6B65\\u52A0\\u8F7D\\u4E86\\u81EA\\u8EAB\\u6A21\\u5757\\uFF0C\\u5F62\\u6210\\u5FAA\\u73AF\\u7B49\\u5F85\\u3002\n\\u539F\\u56E0\\uFF1A\\u521D\\u59CB\\u5316\\u5C1A\\u672A\\u5B8C\\u6210\\uFF0C\\u4E0D\\u80FD\\u7B49\\u5F85\\u81EA\\u8EAB\\u7684\\u521D\\u59CB\\u5316\\u7ED3\\u679C\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u4E0D\\u8981\\u5728 setup/onSession \\u4E2D\\u52A0\\u8F7D\\u540C\\u4E00\\u8FDC\\u7A0B\\u7684\\u6A21\\u5757\\uFF1B\\u8BF7\\u5728\\u9875\\u9762\\u7EC4\\u4EF6\\u4E2D\\u52A0\\u8F7D\\uFF0C\\u6216\\u901A\\u8FC7 context \\u89E3\\u8026\\u3002`,{remote:t});try{I.beforeLoadRemote?.({remote:t,module:s})}catch(h){console.warn("[fulgurjs] beforeLoadRemote \\u89C2\\u6D4B\\u94A9\\u5B50\\u6267\\u884C\\u5931\\u8D25\\uFF1B\\u6A21\\u5757\\u52A0\\u8F7D\\u5C06\\u7EE7\\u7EED\\u3002\\u8BF7\\u68C0\\u67E5\\u8BE5\\u94A9\\u5B50\\uFF1A",h)}let i=c.get(t);if(!i)throw new S(E.REMOTE_UNKNOWN,`\\u672A\\u77E5\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}"\\u3002\\u8BF7\\u5728 federation({ remotes }) \\u4E2D\\u914D\\u7F6E\\uFF0C\\u6216\\u5728\\u52A0\\u8F7D\\u524D\\u8C03\\u7528 registerRemote()\\u3002`,{remote:t});let n;try{let h=s&&i.manifestUrl?F(e):Promise.resolve();[n]=await Promise.all([X(i,{retries:r?.retries}),h])}catch(h){if(r?.fallbackModule)return console.error(`[fulgurjs] \\u8FDC\\u7A0B\\u6A21\\u5757 "${e}" \\u52A0\\u8F7D\\u5931\\u8D25\\uFF0C\\u6B63\\u5728\\u4F7F\\u7528\\u663E\\u5F0F\\u914D\\u7F6E\\u7684 fallbackModule\\uFF1B\\u539F\\u59CB\\u9519\\u8BEF\\uFF1A`,h),$({remote:t,error:h}),await r.fallbackModule();throw h}if(!s)return n;await te(i,n);let u=`${t}@${i.shareScope||"default"}#${s}`;d.has(u)||d.set(u,n.get(s).catch(h=>{throw d.delete(u),h instanceof S||h?.code?h:new S(E.REMOTE_LOAD_FAILED,`\\u65E0\\u6CD5\\u4ECE\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u52A0\\u8F7D\\u6A21\\u5757 "${s}"\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(h?.message??h)}\\u3002\\u8BF7\\u6838\\u5BF9 exposes \\u952E\\u548C\\u8FDC\\u7A0B\\u6784\\u5EFA\\u4EA7\\u7269\\u3002`,{remote:t,module:s})}));let p;try{p=await d.get(u)}catch(h){if(r?.fallbackModule)return console.error(`[fulgurjs] \\u8FDC\\u7A0B\\u6A21\\u5757 "${e}" \\u52A0\\u8F7D\\u5931\\u8D25\\uFF0C\\u6B63\\u5728\\u4F7F\\u7528\\u663E\\u5F0F\\u914D\\u7F6E\\u7684 fallbackModule\\uFF1B\\u539F\\u59CB\\u9519\\u8BEF\\uFF1A`,h),$({remote:t,error:h}),await r.fallbackModule();throw h}try{I.afterLoadRemote?.({remote:t,module:s,module_ns:p})}catch(h){console.warn("[fulgurjs] afterLoadRemote \\u89C2\\u6D4B\\u94A9\\u5B50\\u6267\\u884C\\u5931\\u8D25\\uFF1B\\u5DF2\\u52A0\\u8F7D\\u6A21\\u5757\\u4ECD\\u53EF\\u4F7F\\u7528\\u3002\\u8BF7\\u68C0\\u67E5\\u8BE5\\u94A9\\u5B50\\uFF1A",h)}if(p&&typeof p=="object"&&Object.keys(p).length===0){let h=new S(E.EMPTY_EXPORTS,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u7684\\u6A21\\u5757 "${s}" \\u6CA1\\u6709\\u4EFB\\u4F55\\u5BFC\\u51FA\\u3002\\u8BF7\\u68C0\\u67E5 exposes \\u6307\\u5411\\u7684\\u6587\\u4EF6\\u53CA\\u5176 export \\u58F0\\u660E\\u3002`,{remote:t,module:s});$({remote:t,error:h}),console.error(h.message)}return p}function me(e){let r=c.get(e);if(!r)throw new S(E.REMOTE_UNKNOWN,`\\u672A\\u77E5\\u8FDC\\u7A0B\\u5E94\\u7528 "${e}"\\u3002\\u8BF7\\u5148\\u6CE8\\u518C\\u8BE5\\u8FDC\\u7A0B\\u5E94\\u7528\\u3002`,{remote:e});return X(r)}async function F(e,r={}){let{remote:t,module:s}=C(e),i=c.get(t);if(!i)throw new S(E.REMOTE_UNKNOWN,`\\u672A\\u77E5\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}"\\u3002\\u8BF7\\u5148\\u6CE8\\u518C\\u8BE5\\u8FDC\\u7A0B\\u5E94\\u7528\\u3002`,{remote:t});let n=r.mode??"preload",u=(g,R)=>{if(g.sheet)return Promise.resolve();let f=w.get(g);if(f)return f;let m=new Promise(v=>{let _=()=>{g.removeEventListener("load",_),g.removeEventListener("error",T),v()},T=()=>{$({remote:t,error:new S(E.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u7684\\u6837\\u5F0F\\u8D44\\u6E90\\u52A0\\u8F7D\\u5931\\u8D25\\uFF1A${R}\\u3002\\u8BF7\\u68C0\\u67E5\\u6587\\u4EF6\\u662F\\u5426\\u5B58\\u5728\\u4EE5\\u53CA\\u8DE8\\u57DF\\u548C\\u7F13\\u5B58\\u914D\\u7F6E\\u3002`,{remote:t})}),_()};g.addEventListener("load",_,{once:!0}),g.addEventListener("error",T,{once:!0}),g.sheet&&_()});return w.set(g,m),m},p=(g,R)=>{if(typeof document>"u")return Promise.resolve();let f=document.querySelector(`link[href="${g}"]`);if(f)return R==="style"&&n==="preload"?w.get(f)??Promise.resolve():Promise.resolve();let m=document.createElement("link");m.rel=R==="style"?"stylesheet":"modulepreload",m.href=g,n==="prefetch"&&(m.fetchPriority="low");let v=R==="style"?u(m,g):Promise.resolve();return document.head.appendChild(m),R==="style"&&n==="preload"?v:Promise.resolve()},h=g=>{let R=typeof document<"u"?document.baseURI:void 0,f=new URL(i.entry,R||"http://fulgurjs.invalid/");return!f.pathname.endsWith("/")&&!f.pathname.split("/").pop().includes(".")&&(f.pathname+="/"),new URL(g,f).href};try{if(i.manifestUrl){let g=y.get(i.manifestUrl);g||(g=fetch(i.manifestUrl,{cache:"no-cache",signal:AbortSignal.timeout(8e3)}).then(f=>f.ok?f.json():void 0),y.set(i.manifestUrl,g),g.then(f=>{f||y.delete(i.manifestUrl)},()=>y.delete(i.manifestUrl)));let R=await g;if(R){let f=R.schemaVersion;if(typeof f=="number"&&(!Number.isInteger(f)||f>1)){$({remote:t,error:new S(E.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u7684 manifest \\u534F\\u8BAE\\u7248\\u672C\\u4E3A ${String(f)}\\uFF0C\\u5F53\\u524D\\u4EC5\\u652F\\u6301\\u7248\\u672C 1\\u3002\\u8BF7\\u7EDF\\u4E00\\u5BBF\\u4E3B\\u548C\\u8FDC\\u7A0B\\u7684\\u63D2\\u4EF6\\u7248\\u672C\\u3002`,{remote:t})}),await p(i.entry,"modulepreload");return}await p(i.entry,"modulepreload");let m=R.exposes,v=Array.isArray(m)?m.filter(M=>M&&typeof M=="object").map(M=>[String(M.name??""),M]):m&&typeof m=="object"?Object.entries(m):[],_=s?v.filter(([M,x])=>B(String(x?.name??M))===s):v,T=[];for(let[,M]of _)if(typeof M?.file=="string"&&await p(h(M.file),"modulepreload"),Array.isArray(M?.css))for(let x of M.css){if(typeof x!="string")continue;let pe=p(h(x),"style");n==="preload"&&T.push(pe)}await Promise.all(T);return}}await p(i.entry,"modulepreload")}catch(g){$({remote:t,error:new S(E.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u9884\\u52A0\\u8F7D\\u5931\\u8D25\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(g?.message??g)}\\u3002\\u8BF7\\u68C0\\u67E5 manifest \\u548C\\u8D44\\u6E90\\u5730\\u5740\\u3002`,{remote:t})})}}return typeof window>"u"||(window.__FULGURJS_SCOPE__=a,window.__FULGURJS_INFO__={get remotes(){let e={};for(let[r,t]of c)e[r]={...t.debug,entry:t.entry};return e},errors:[]}),{shareScopeMap:a,initSharing:oe,registerShare:se,registerRemotes:H,registerRemote:ae,registerPlugins:ce,loadShare:le,loadRemote:fe,getContainer:me,preloadRemote:F,parseSpec:C,clearSessionState:ne}}var Y=globalThis,P=Y.__FULGURJS_RUNTIME__??Oe();Y.__FULGURJS_RUNTIME__=P;try{Object.freeze(P)}catch{}var Ce=W;function Fe(){return P}var De=P.initSharing,Ve=P.registerShare,Ke=P.registerRemotes,He=P.registerRemote,qe=P.registerPlugins,Ge=P.loadShare,Je=P.loadRemote,Xe=P.getContainer,Be=P.preloadRemote,We=P.parseSpec,ze=P.clearSessionState,Ye=P.shareScopeMap;function Ze(a){if(a&&typeof a=="object"&&"default"in a){let c=a.default;return c!==void 0?c:a}return a}var Qe=P;export{ze as clearSessionState,Qe as default,Xe as getContainer,Fe as getRuntime,De as initSharing,Je as loadRemote,Ge as loadShare,We as parseSpec,Be as preloadRemote,qe as registerPlugins,He as registerRemote,Ke as registerRemotes,Ve as registerShare,P as runtime,Ye as shareScopeMap,Ze as unwrapDefault,Ce as version};\n';
|
|
2184
|
+
var runtime_code_gen_default = 'var ge=/^v?(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:-((?:[0-9A-Za-z-]+)(?:\\.[0-9A-Za-z-]+)*))?(?:\\+[0-9A-Za-z.-]+)?$/;function j(a){let c=ge.exec(String(a).trim());return c?{major:Number(c[1]),minor:Number(c[2]??0),patch:Number(c[3]??0),pre:c[4]?c[4].split("."):[]}:null}function he(a,c){if(a.length===0&&c.length===0)return 0;if(a.length===0)return 1;if(c.length===0)return-1;let u=Math.max(a.length,c.length);for(let i=0;i<u;i++){let p=a[i],y=c[i];if(p===void 0)return-1;if(y===void 0)return 1;let w=/^\\d+$/.test(p),P=/^\\d+$/.test(y);if(w&&P){let I=Number(p)-Number(y);if(I!==0)return I}else{if(w!==P)return w?-1:1;if(p!==y)return p<y?-1:1}}return 0}function T(a,c){let u=j(a),i=j(c);return!u||!i?a<c?-1:a>c?1:0:u.major!==i.major?u.major-i.major:u.minor!==i.minor?u.minor-i.minor:u.patch!==i.patch?u.patch-i.patch:he(u.pre,i.pre)}var ye=/^[a-z]+[+:-]/i;function k(a,c){if(c===!1||c==null||c==="")return!0;let u=String(c).trim();return!u||u==="*"||u==="latest"||ye.test(u)?!0:u.split("||").some(i=>Se(a,i.trim()))}function Se(a,c){if(!c||c==="*")return!j(a)?.pre.length;let u=c.split(/\\s+-\\s+/);if(u.length===2){let y=u[0].trim(),w=u[1].trim();return!(!k(a,`>=${y}`)||!k(a,`<=${w}`))}let i=j(a);if(!i)return!1;let p=Ee(c);if(p===null)return!0;for(let y of p)if(!$e(i,a,y))return!1;return!(i.pre.length>0&&!p.some(y=>y.ver.pre.length>0)&&!p.some(w=>w.ver.major===i.major&&w.ver.minor===i.minor&&w.ver.patch===i.patch))}function Ee(a){let c=[],u=a.trim().split(/\\s+/).filter(Boolean);if(u.length===0)return null;for(let i of u){let p=/^(>=|<=|>|<|=|\\^|~)?(.*)$/.exec(i);if(!p)return null;let y=p[1],w=p[2],P=Re(y,w);if(P===null)return null;c.push(...P)}return c}function Re(a,c){let u=be(c);if(!u)return null;let{ver:i,partial:p}=u;switch(a){case"^":{let y=we(i);return y?[{op:">=",ver:i},{op:"<",ver:y}]:null}case"~":{let y=p>=2?{major:i.major,minor:i.minor+1,patch:0,pre:[]}:{major:i.major+1,minor:0,patch:0,pre:[]};return[{op:">=",ver:i},{op:"<",ver:y}]}case">=":return[{op:">=",ver:i}];case">":return p===1?[{op:">=",ver:{major:i.major+1,minor:0,patch:0,pre:[]}}]:p===2?[{op:">=",ver:{major:i.major,minor:i.minor+1,patch:0,pre:[]}}]:[{op:">",ver:i}];case"<":return p===1?[{op:"<",ver:{major:i.major,minor:0,patch:0,pre:[]}}]:p===2?[{op:"<",ver:{major:i.major,minor:i.minor,patch:0,pre:[]}}]:[{op:"<",ver:i}];case"<=":return[{op:"<=",ver:i}];case"=":case void 0:return p===1?[{op:">=",ver:i},{op:"<",ver:{major:i.major+1,minor:0,patch:0,pre:[]}}]:p===2?[{op:">=",ver:i},{op:"<",ver:{major:i.major,minor:i.minor+1,patch:0,pre:[]}}]:[{op:"=",ver:i}];default:return null}}function we(a){return a.major>0?{major:a.major+1,minor:0,patch:0,pre:[]}:a.minor>0?{major:0,minor:a.minor+1,patch:0,pre:[]}:{major:0,minor:0,patch:a.patch+1,pre:[]}}function be(a){let c=a.replace(/^v/,"").trim();if(!c||c==="*"||c==="x"||c==="X")return{ver:{major:0,minor:0,patch:0,pre:[]},partial:0};let u=c.split("."),i=[],p=0;for(let P of u.slice(0,3))if(/^\\d+$/.test(P))i.push(Number(P)),p++;else{if(P==="x"||P==="X"||P==="*")break;break}let y=c.split("-"),w=y.length>1?y.slice(1).join("-").split("+")[0].split("."):[];return p===0&&w.length===0?{ver:{major:0,minor:0,patch:0,pre:[]},partial:0}:{ver:{major:i[0]??0,minor:i[1]??0,patch:i[2]??0,pre:w},partial:p}}function Pe(a,c){switch(c){case">=":return a>=0;case">":return a>0;case"<":return a<0;case"<=":return a<=0;case"=":return a===0}}function $e(a,c,u){let i=`${a.major}.${a.minor}.${a.patch}`+(a.pre.length?`-${a.pre.join(".")}`:"");if(u.upper)return!(!(T(i,`${u.ver.major}.${u.ver.minor}.${u.ver.patch}`+(u.ver.pre.length?`-${u.ver.pre.join(".")}`:""))>=0)||!(T(i,`${u.upper.major}.${u.upper.minor}.${u.upper.patch}`)<0));let p=T(i,`${u.ver.major}.${u.ver.minor}.${u.ver.patch}`+(u.ver.pre.length?`-${u.ver.pre.join(".")}`:"")),y=Pe(p,u.op);return u.ver.pre.length>0&&a.pre.length===0&&(u.op===">"||u.op==="<")?!1:y}var S=class extends Error{code;details;constructor(c,u,i,p){super(`[fulgurjs:${c}] ${u}`,p),this.name="FgError",this.code=c,this.details=i}},E={REMOTE_LOAD_FAILED:"MFU-001",REMOTE_NAME_MISMATCH:"MFU-002",SHARE_STRICT_VERSION:"MFU-003",SHARE_NOT_AVAILABLE:"MFU-004",CONTAINER_REINIT_CONFLICT:"MFU-005",MODULE_NOT_EXPOSED:"MFU-006",PRELOAD_FAILED:"MFU-007",REMOTE_UNKNOWN:"MFU-008",EMPTY_EXPORTS:"MFU-009",SINGLETON_SKEW:"MFU-010",SETUP_INVALID_EXPORT:"MFU-011",SETUP_RUN_FAILED:"MFU-012",SETUP_SESSION_KEY_MISSING:"MFU-013",SETUP_RECURSION:"MFU-014"};var W="5.3.1";var _e="__fulgurjsSetup",Me="__FULGURJS_APP_CONFIG__",D=15e3,z=2,ve=5,Ie=3e4,Oe=4e3,Te=.2;function Le(){let a=Object.create(null),c=new Map,u=[],i=new Set,p=new Map,y=new Map,w=new WeakMap,P=new WeakMap,I={},Z=()=>{for(let e of u)try{e.init?.(I)}catch(r){console.warn("[fulgurjs] \\u8FD0\\u884C\\u65F6\\u6269\\u5C55\\u521D\\u59CB\\u5316\\u5931\\u8D25\\uFF0C\\u8BE5\\u6269\\u5C55\\u5C06\\u4E0D\\u53EF\\u7528\\uFF1A",e.name,r)}},U=new Map,A,Q=e=>{let r=U.get(e);return r||U.set(e,r={}),r},V=()=>globalThis[Me]??{};async function K(e,r,t,n){let s=l=>l instanceof S?l:new S(E.SETUP_RUN_FAILED,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e}" \\u7684 ${n} \\u521D\\u59CB\\u5316\\u5931\\u8D25\\u3002\n\\u539F\\u56E0\\uFF1A${String(l?.message??l)}\n\\u4FEE\\u6CD5\\uFF1A\\u68C0\\u67E5\\u5E76\\u4FEE\\u590D\\u8BE5 ${n} \\u51FD\\u6570\\u540E\\u91CD\\u65B0\\u52A0\\u8F7D\\uFF1B\\u5931\\u8D25\\u7F13\\u5B58\\u5DF2\\u6E05\\u9664\\uFF0C\\u53EF\\u4EE5\\u76F4\\u63A5\\u91CD\\u8BD5\\u3002`,{remote:e,phase:n},{cause:l});A=e;let o;try{o=r(t)}catch(l){throw s(l)}finally{A=void 0}try{await o}catch(l){throw s(l)}}async function ee(e,r,t,n){e.debug.setup="pending";try{if(e.manifestUrl)try{await F(`${e.name}/${t}`)}catch{}let s=await r.get(t),o=s?.default;if(typeof o!="function")throw new S(E.SETUP_INVALID_EXPORT,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 setup \\u6A21\\u5757 "${t}" \\u65E0\\u6CD5\\u521D\\u59CB\\u5316\\u3002\n\\u539F\\u56E0\\uFF1A\\u9ED8\\u8BA4\\u5BFC\\u51FA\\u7C7B\\u578B\\u4E3A ${s==null?String(s):typeof o}\\uFF0C\\u5E94\\u4E3A\\u51FD\\u6570\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5728 setup \\u6307\\u5411\\u7684\\u6587\\u4EF6\\u4E2D\\u9ED8\\u8BA4\\u5BFC\\u51FA\\u51FD\\u6570\\uFF0C\\u4F8B\\u5982 export default async function setup(context) { ... }\\uFF1B\\u5177\\u540D onSession \\u53EF\\u9009\\u3002`,{remote:e.name,module:t});if(s.onSession!==void 0&&typeof s.onSession!="function")throw new S(E.SETUP_INVALID_EXPORT,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 setup \\u6A21\\u5757 "${t}" \\u65E0\\u6CD5\\u521D\\u59CB\\u5316\\u3002\n\\u539F\\u56E0\\uFF1AonSession \\u5BFC\\u51FA\\u7C7B\\u578B\\u4E3A ${typeof s.onSession}\\uFF0C\\u5E94\\u4E3A\\u51FD\\u6570\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5C06 onSession \\u6539\\u4E3A\\u5177\\u540D\\u5BFC\\u51FA\\u7684\\u51FD\\u6570\\uFF0C\\u6216\\u5220\\u9664\\u8BE5\\u5BFC\\u51FA\\u3002`,{remote:e.name,module:t});n.setupExports=s,await K(e.name,o,{appContext:V(),signal:(n.controller??=new AbortController).signal},"setup"),e.debug.setup="ready"}catch(s){throw e.debug.setup="failed",n.setupExports=void 0,s}}async function re(e,r,t){let n=V(),s=n?.sessionKey;if(typeof s!="string"||s==="")throw new S(E.SETUP_SESSION_KEY_MISSING,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u58F0\\u660E\\u4E86 onSession\\uFF0C\\u4F46\\u5BBF\\u4E3B\\u5C1A\\u672A\\u63D0\\u4F9B\\u6709\\u6548\\u7684 AppContext.sessionKey\\u3002\n\\u539F\\u56E0\\uFF1A\\u5F53\\u524D\\u503C\\u4E3A ${s===void 0?"\\u7F3A\\u5931":JSON.stringify(s)}\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5BBF\\u4E3B\\u6BCF\\u6B21\\u767B\\u5F55\\u6216\\u91CD\\u767B\\u65F6\\u751F\\u6210\\u65B0\\u7684\\u975E\\u654F\\u611F\\u767B\\u5F55\\u4EE3\\u6B21 ID\\uFF0C\\u5E76\\u5728\\u52A0\\u8F7D\\u8FDC\\u7A0B\\u9875\\u9762\\u524D\\u8C03\\u7528 provideAppContext({ ..., sessionKey: \'\\u767B\\u5F55\\u4EE3\\u6B21 ID\' })\\uFF1B\\u4E0D\\u8981\\u4F7F\\u7528 token \\u539F\\u6587\\u3002`,{remote:e.name});if(r.sessionPromise&&r.sessionKey===s)return r.sessionPromise;r.controller?.abort();let o=new AbortController;r.controller=o,r.sessionKey=s;let l=r.sessionPromise?r.sessionPromise.catch(()=>{}):Promise.resolve(),m=(async()=>{await l,!o.signal.aborted&&await K(e.name,t,{appContext:n,sessionKey:s,signal:o.signal},"onSession")})();return r.sessionPromise=m,m.catch(()=>{r.sessionKey===s&&(r.sessionKey=void 0,r.sessionPromise=void 0)}),m}async function te(e,r){let t=r?.[_e];if(typeof t!="string"||t==="")return;let n=Q(e.name);n.setupPromise||(n.setupPromise=ee(e,r,t,n).catch(o=>{throw n.setupPromise=void 0,o})),await n.setupPromise;let s=n.setupExports?.onSession;typeof s=="function"&&await re(e,n,s)}function ne(){for(let e of U.values()){try{e.controller?.abort()}catch{}e.sessionKey=void 0,e.sessionPromise=void 0}}let L=e=>a[e]??=Object.create(null);function M(e){try{I.onRemoteError?.(e)}catch{}typeof window<"u"&&window.dispatchEvent(new CustomEvent("fulgurjs:error",{detail:e}))}function oe(e="default"){return L(e),a}function se(e,r,t,n,s={}){let o=L(e||"default"),l=Object.hasOwn(o,r)?o[r]:void 0,m=l&&typeof l=="object"?l:void 0;m||(m=Object.create(null),o[r]=m),!(Object.hasOwn(m,t)&&m[t])&&(m[t]={version:t,get:n,from:s.from??"unknown",eager:!!s.eager,loaded:!!s.loaded})}function ie(e){let r=(t,n,s)=>{if(t===void 0)return;if(!(typeof t=="number"&&(s?Number.isInteger(t)&&t>=0&&t<=10:Number.isFinite(t)&&t>0)))throw new Error(`[fulgurjs] \\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 ${n} \\u914D\\u7F6E\\u65E0\\u6548\\uFF1A\\u5F53\\u524D\\u4E3A ${String(t)}\\uFF0C\\u5E94\\u4E3A${s?" 0 \\u5230 10 \\u7684\\u6574\\u6570":"\\u5927\\u4E8E 0 \\u7684\\u6709\\u9650\\u6570\\u5B57"}\\u3002\\u8BF7\\u4FEE\\u6B63 registerRemote \\u914D\\u7F6E\\u3002`)};r(e.timeout,"timeout"),r(e.retries,"retries",!0),e.breaker&&(r(e.breaker.threshold,"breaker.threshold"),r(e.breaker.resetMs,"breaker.resetMs"))}function H(e){for(let r of e){ie(r);let t=c.get(r.name);c.set(r.name,{timeout:D,retries:z,...t,...r,breakerThreshold:r.breaker?.threshold??t?.breakerThreshold??ve,breakerResetMs:r.breaker?.resetMs??t?.breakerResetMs??Ie,state:t?.state??"idle",breakerState:t?.breakerState??{fails:0,openUntil:0},entryInflight:t?.entryInflight??new Map,entryFailCounts:t?.entryFailCounts??new Map,debug:t?.debug??{entry:r.entry,status:"idle",setup:"none"}})}}function ae(e){H([e])}function ce(e){u.push(...e),Z()}async function ue(e,r={}){let t=r.shareScope||"default",n=r.shareKey||e,o=L(t)[n]||{},l=Object.keys(o),m=r.requiredVersion,h=l.filter(f=>m===void 0||m===!1||k(f,m)),d;if(r.singleton&&l.length>0){let f=l.filter($=>o[$].loaded);if(d=[...f.length?f:l].sort(T).pop(),!h.includes(d)){let $=o[d],v=`\\u73B0\\u8C61\\uFF1A\\u5171\\u4EAB\\u5355\\u4F8B "${n}" \\u7684\\u5B9E\\u9645\\u7248\\u672C\\u4E0D\\u6EE1\\u8DB3\\u5F53\\u524D\\u5E94\\u7528\\u8981\\u6C42\\u3002\n\\u539F\\u56E0\\uFF1A\\u5E94\\u7528\\u8981\\u6C42 ${m??"\\u4EFB\\u610F\\u7248\\u672C"}\\uFF0C\\u4F5C\\u7528\\u57DF\\u4E2D\\u6709 ${l.join("\\u3001")}\\uFF1B\\u4E3A\\u4FDD\\u8BC1\\u5168\\u9875\\u53EA\\u4F7F\\u7528\\u4E00\\u4E2A\\u5B9E\\u4F8B\\uFF0C\\u6700\\u7EC8\\u590D\\u7528 ${$.from} \\u63D0\\u4F9B\\u7684 ${d}\\u3002\n\\u5F71\\u54CD\\uFF1A\\u53EF\\u80FD\\u51FA\\u73B0\\u72B6\\u6001\\u4E0D\\u4E00\\u81F4\\u6216\\u8FD0\\u884C\\u9519\\u8BEF\\uFF0C\\u5177\\u4F53\\u53D6\\u51B3\\u4E8E\\u4E24\\u7AEF API \\u662F\\u5426\\u517C\\u5BB9\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u7EDF\\u4E00\\u5BBF\\u4E3B\\u4E0E\\u8FDC\\u7A0B\\u7684\\u4F9D\\u8D56\\u7248\\u672C\\uFF0C\\u6216\\u6838\\u5BF9\\u540E\\u8C03\\u6574 shared.requiredVersion\\uFF1B\\u82E5\\u5FC5\\u987B\\u62D2\\u7EDD\\u4E0D\\u517C\\u5BB9\\u7248\\u672C\\uFF0C\\u8BF7\\u542F\\u7528 strictVersion\\u3002`;if(r.strictVersion){let _=new S(E.SHARE_STRICT_VERSION,v,{shareKey:n,requiredVersion:m});throw M({remote:$.from,error:_}),_}let O=`${t}|${n}|${m??"*"}|${d}|${l.join(",")}`;i.has(O)||(i.add(O),console.warn(`[fulgurjs:MFU-010] ${v}`))}}else if(d=[...h].sort(T).pop(),!d){if(r.strictVersion){let $=new S(E.SHARE_STRICT_VERSION,`\\u73B0\\u8C61\\uFF1A\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${t}" \\u4E2D\\u627E\\u4E0D\\u5230\\u7B26\\u5408\\u8981\\u6C42\\u7684 "${n}"\\u3002\n\\u539F\\u56E0\\uFF1A\\u8981\\u6C42\\u7248\\u672C ${m}\\uFF0C\\u5F53\\u524D\\u53EF\\u7528\\u7248\\u672C\\u4E3A ${l.join("\\u3001")||"\\u65E0"}\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u7EDF\\u4E00\\u5BBF\\u4E3B\\u4E0E\\u8FDC\\u7A0B\\u7684\\u4F9D\\u8D56\\u7248\\u672C\\uFF0C\\u6216\\u4FEE\\u6B63 shared.requiredVersion\\u3002`);throw M({remote:n,error:$}),$}if(r.fallback)return r.fallback();let f=new S(E.SHARE_NOT_AVAILABLE,`\\u73B0\\u8C61\\uFF1A\\u65E0\\u6CD5\\u52A0\\u8F7D\\u5171\\u4EAB\\u4F9D\\u8D56 "${n}"\\u3002\n\\u539F\\u56E0\\uFF1A\\u4F5C\\u7528\\u57DF "${t}" \\u4E2D\\u6CA1\\u6709\\u7B26\\u5408 ${m??"\\u4EFB\\u610F\\u7248\\u672C"} \\u8981\\u6C42\\u7684\\u7248\\u672C\\uFF0C\\u4E14\\u672A\\u914D\\u7F6E\\u672C\\u5730\\u526F\\u672C\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5728\\u5BBF\\u4E3B\\u6216\\u8FDC\\u7A0B\\u6CE8\\u518C\\u8BE5\\u4F9D\\u8D56\\uFF0C\\u6216\\u4E3A shared \\u914D\\u7F6E\\u53EF\\u7528\\u7684\\u672C\\u5730\\u526F\\u672C\\u3002`,{shareKey:n,requiredVersion:m});throw M({remote:n,error:f}),f}let R=o[d];if(I.resolveShare){let f=await I.resolveShare({shareKey:n,shareScope:t,requiredVersion:m,picked:R,available:Object.values(o)});f&&(R=f)}R.loaded=!0;let g=await R.get();return R.value=g,g}function le(e,r={}){let t=r.shareKey||e,n=L(r.shareScope||"default")[t]||{},s=Object.keys(n).filter(o=>n[o].value!==void 0);if(s.length!==0)return n[s.sort(T).pop()].value}function q(e){try{let r=new URL(e,typeof location<"u"?location.href:"http://f.invalid");return r.protocol+"//"+r.host+r.pathname}catch{return String(e).replace(/[?#].*$/,"")}}function G(e,r,t){return new Promise((n,s)=>{let o=setTimeout(()=>s(new Error(`\\u7B49\\u5F85\\u8D85\\u8FC7 ${r} \\u6BEB\\u79D2\\uFF1A${t}`)),r);e.then(l=>{clearTimeout(o),n(l)},l=>{clearTimeout(o),s(l)})})}let fe=e=>new Promise(r=>setTimeout(r,e));function N(e,r){if(!e||typeof e.get!="function")throw new Error(`\\u8FDC\\u7A0B\\u5E94\\u7528 "${r.name}" \\u7684 remoteEntry \\u672A\\u5BFC\\u51FA\\u5BB9\\u5668\\u63A5\\u53E3\\u3002\\u8BF7\\u786E\\u8BA4\\u5165\\u53E3\\u5BFC\\u51FA\\u4E86 get()\\uFF0C\\u5E76\\u68C0\\u67E5\\u8BE5\\u5730\\u5740\\u662F\\u5426\\u8FD4\\u56DE\\u6B63\\u786E\\u7684\\u8054\\u90A6\\u5165\\u53E3 JS\\u3002`);if(e.name&&r.name&&e.name!==r.name){let t=`\\u8FDC\\u7A0B\\u5165\\u53E3\\u81EA\\u62A5\\u540D\\u79F0 "${e.name}" \\u4E0E\\u5BBF\\u4E3B\\u914D\\u7F6E\\u540D\\u79F0 "${r.name}" \\u4E0D\\u4E00\\u81F4\\u3002\\u8BF7\\u7EDF\\u4E00\\u4E24\\u4FA7 federation({ name }) \\u4E0E remotes \\u7684\\u540D\\u79F0\\u3002`;if(r.promise)console.warn(`[fulgurjs] ${t} \\u5F53\\u524D\\u662F\\u52A8\\u6001 Promise \\u8FDC\\u7A0B\\uFF0C\\u7EE7\\u7EED\\u52A0\\u8F7D\\u3002`);else throw Object.assign(new Error(t),{code:E.REMOTE_NAME_MISMATCH})}}async function J(e,r){let t=r.entryFailCounts.get(e)??0,n=t>0?`${e}${e.includes("?")?"&":"?"}fulgurjs_retry=${t}`:e,s=r.entryInflight.get(e),o=s??import(n);return s||(r.entryInflight.set(e,o),o.catch(()=>{r.entryInflight.delete(e),r.entryFailCounts.set(e,(r.entryFailCounts.get(e)??0)+1)})),G(o,r.timeout??D,`\\u52A0\\u8F7D\\u8FDC\\u7A0B\\u5165\\u53E3 ${q(e)}`)}async function X(e,r){let t=e.shareScope||"default";if(e.container){let o=P.get(e.container);if(o&&o!==t)throw new S(E.CONTAINER_REINIT_CONFLICT,`\\u8FDC\\u7A0B\\u5BB9\\u5668 "${e.name}" \\u5DF2\\u4F7F\\u7528\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${o}" \\u521D\\u59CB\\u5316\\uFF0C\\u4E0D\\u80FD\\u518D\\u4EE5 "${t}" \\u521D\\u59CB\\u5316\\u3002\\u8BF7\\u7EDF\\u4E00 shareScope \\u914D\\u7F6E\\u3002`);return e.container}if(e.containerPromise)return e.containerPromise;let n=e.breakerState;if(n.openUntil>Date.now()){let o=new S(E.REMOTE_LOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u8FDE\\u7EED\\u52A0\\u8F7D\\u5931\\u8D25\\uFF0C\\u7194\\u65AD\\u5668\\u5DF2\\u5F00\\u542F\\uFF1B\\u5C06\\u5728 ${new Date(n.openUntil).toISOString()} \\u540E\\u5141\\u8BB8\\u91CD\\u8BD5\\u3002\\u8BF7\\u5148\\u68C0\\u67E5\\u8FDC\\u7A0B\\u5165\\u53E3\\u670D\\u52A1\\u548C\\u7F51\\u7EDC\\u3002`,{remote:e.name});throw M({remote:e.name,error:o}),o}e.state="loading",e.debug.status="loading";let s=(async()=>{let o=[];if(e.promise)o.push(async()=>{let g=await G(e.promise(),e.timeout??D,`\\u89E3\\u6790\\u52A8\\u6001\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}"`),f=typeof g=="string"?await J(g,e):g;return N(f,e),f});else for(let g of[e.entry,...e.fallback??[]])o.push(async()=>{let f=await J(g,e);return N(f,e),f});let l,m,h=!1,d=r?.retries??e.retries??z;for(let g of o){for(let f=0;f<=d;f++){let $=performance.now();try{l=await g(),e.lastLoadMs=Math.round(performance.now()-$),e.debug.lastLoadMs=e.lastLoadMs,h=!0;break}catch(v){if(m=v,v?.code)throw v;f<d&&await fe(Math.min(Oe,200*2**f)*(1-Te*(1-2*Math.random())))}}if(h)break}if(!h||!l){let g=q(e.entry),f=[];throw/^https?:\\/\\//.test(e.entry)&&typeof location<"u"?(f.push(`1. \\u5728\\u6D4F\\u89C8\\u5668\\u6253\\u5F00 ${g}\\uFF0C\\u786E\\u8BA4\\u8FDC\\u7A0B\\u5F00\\u53D1\\u670D\\u52A1\\u5DF2\\u542F\\u52A8\\uFF0C\\u5E76\\u8FD4\\u56DE JS \\u800C\\u975E HTML\\u3002`),f.push("2. \\u6838\\u5BF9 federation({ remotes }) \\u4E2D\\u7684\\u5730\\u5740\\uFF1B\\u5F00\\u53D1\\u548C\\u751F\\u4EA7\\u5730\\u5740\\u53EF\\u4EE5\\u4E0D\\u540C\\u3002"),f.push("3. \\u82E5\\u8DE8\\u57DF\\uFF0C\\u68C0\\u67E5\\u8FDC\\u7A0B\\u5F00\\u53D1\\u670D\\u52A1\\u7684 server.cors \\u914D\\u7F6E\\u3002")):(f.push(`1. \\u5728\\u6D4F\\u89C8\\u5668\\u6253\\u5F00 ${g}\\uFF0C\\u786E\\u8BA4\\u8FDC\\u7A0B\\u5E94\\u7528\\u5DF2\\u90E8\\u7F72\\uFF0C\\u4E14\\u5165\\u53E3\\u8FD4\\u56DE JS\\u3002`),f.push("2. \\u68C0\\u67E5 Nginx/CDN \\u7684\\u5165\\u53E3\\u8DEF\\u5F84\\u6620\\u5C04\\uFF1B\\u8BE5\\u5730\\u5740\\u4E0D\\u80FD\\u56DE\\u9000\\u5230 index.html\\u3002")),new S(E.REMOTE_LOAD_FAILED,`\\u73B0\\u8C61\\uFF1A\\u65E0\\u6CD5\\u4ECE ${g} \\u52A0\\u8F7D\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}"\\u3002\n\\u539F\\u56E0\\uFF1A${String(m?.message??m)}\n\\u4FEE\\u6CD5\\uFF1A\n${f.join(`\n`)}`,{remote:e.name})}N(l,e);let R=P.get(l);if(R&&R!==t)throw new S(E.CONTAINER_REINIT_CONFLICT,`\\u8FDC\\u7A0B\\u5BB9\\u5668 "${e.name}" \\u5DF2\\u4F7F\\u7528\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${R}" \\u521D\\u59CB\\u5316\\uFF0C\\u4E0D\\u80FD\\u518D\\u4EE5 "${t}" \\u521D\\u59CB\\u5316\\u3002\\u8BF7\\u7EDF\\u4E00 shareScope \\u914D\\u7F6E\\u3002`);return typeof l.init=="function"&&await l.init(a),P.set(l,t),e.container=l,e.state="loaded",e.debug.status="loaded",n.fails=0,l})();e.containerPromise=s;try{return await s}catch(o){if(e.containerPromise=void 0,e.state="failed",e.debug.status="failed",e.debug.error=String(o?.message??o),n.fails+=1,n.fails>=e.breakerThreshold&&(n.openUntil=Date.now()+e.breakerResetMs,n.fails=0),o instanceof S)throw M({remote:e.name,error:o}),o;if(o?.code)throw M({remote:e.name,error:o}),o;let l=new S(E.REMOTE_LOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u52A0\\u8F7D\\u5931\\u8D25\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(o?.message??o)}\\u3002\\u8BF7\\u68C0\\u67E5\\u8FDC\\u7A0B\\u5165\\u53E3\\u3001\\u7F51\\u7EDC\\u53CA\\u5171\\u4EAB\\u4F9D\\u8D56\\u3002`,{remote:e.name});throw M({remote:e.name,error:l}),l}}function C(e){let r=e.indexOf("/");return r===-1?{remote:e,module:""}:{remote:e.slice(0,r),module:B(e.slice(r+1))}}function B(e){return e?e.startsWith(".")?e:`./${e}`:""}async function me(e,r){let{remote:t,module:n}=C(e);if(n&&A===t)throw new S(E.SETUP_RECURSION,`\\u73B0\\u8C61\\uFF1A\\u52A0\\u8F7D "${e}" \\u65F6\\uFF0C\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u7684 setup/onSession \\u53C8\\u540C\\u6B65\\u52A0\\u8F7D\\u4E86\\u81EA\\u8EAB\\u6A21\\u5757\\uFF0C\\u5F62\\u6210\\u5FAA\\u73AF\\u7B49\\u5F85\\u3002\n\\u539F\\u56E0\\uFF1A\\u521D\\u59CB\\u5316\\u5C1A\\u672A\\u5B8C\\u6210\\uFF0C\\u4E0D\\u80FD\\u7B49\\u5F85\\u81EA\\u8EAB\\u7684\\u521D\\u59CB\\u5316\\u7ED3\\u679C\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u4E0D\\u8981\\u5728 setup/onSession \\u4E2D\\u52A0\\u8F7D\\u540C\\u4E00\\u8FDC\\u7A0B\\u7684\\u6A21\\u5757\\uFF1B\\u8BF7\\u5728\\u9875\\u9762\\u7EC4\\u4EF6\\u4E2D\\u52A0\\u8F7D\\uFF0C\\u6216\\u901A\\u8FC7 context \\u89E3\\u8026\\u3002`,{remote:t});try{I.beforeLoadRemote?.({remote:t,module:n})}catch(h){console.warn("[fulgurjs] beforeLoadRemote \\u89C2\\u6D4B\\u94A9\\u5B50\\u6267\\u884C\\u5931\\u8D25\\uFF1B\\u6A21\\u5757\\u52A0\\u8F7D\\u5C06\\u7EE7\\u7EED\\u3002\\u8BF7\\u68C0\\u67E5\\u8BE5\\u94A9\\u5B50\\uFF1A",h)}let s=c.get(t);if(!s)throw new S(E.REMOTE_UNKNOWN,`\\u672A\\u77E5\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}"\\u3002\\u8BF7\\u5728 federation({ remotes }) \\u4E2D\\u914D\\u7F6E\\uFF0C\\u6216\\u5728\\u52A0\\u8F7D\\u524D\\u8C03\\u7528 registerRemote()\\u3002`,{remote:t});let o;try{let h=n&&s.manifestUrl?F(e):Promise.resolve();[o]=await Promise.all([X(s,{retries:r?.retries}),h])}catch(h){if(r?.fallbackModule)return console.error(`[fulgurjs] \\u8FDC\\u7A0B\\u6A21\\u5757 "${e}" \\u52A0\\u8F7D\\u5931\\u8D25\\uFF0C\\u6B63\\u5728\\u4F7F\\u7528\\u663E\\u5F0F\\u914D\\u7F6E\\u7684 fallbackModule\\uFF1B\\u539F\\u59CB\\u9519\\u8BEF\\uFF1A`,h),M({remote:t,error:h}),await r.fallbackModule();throw h}if(!n)return o;await te(s,o);let l=`${t}@${s.shareScope||"default"}#${n}`;p.has(l)||p.set(l,o.get(n).catch(h=>{throw p.delete(l),h instanceof S||h?.code?h:new S(E.REMOTE_LOAD_FAILED,`\\u65E0\\u6CD5\\u4ECE\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u52A0\\u8F7D\\u6A21\\u5757 "${n}"\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(h?.message??h)}\\u3002\\u8BF7\\u6838\\u5BF9 exposes \\u952E\\u548C\\u8FDC\\u7A0B\\u6784\\u5EFA\\u4EA7\\u7269\\u3002`,{remote:t,module:n})}));let m;try{m=await p.get(l)}catch(h){if(r?.fallbackModule)return console.error(`[fulgurjs] \\u8FDC\\u7A0B\\u6A21\\u5757 "${e}" \\u52A0\\u8F7D\\u5931\\u8D25\\uFF0C\\u6B63\\u5728\\u4F7F\\u7528\\u663E\\u5F0F\\u914D\\u7F6E\\u7684 fallbackModule\\uFF1B\\u539F\\u59CB\\u9519\\u8BEF\\uFF1A`,h),M({remote:t,error:h}),await r.fallbackModule();throw h}try{I.afterLoadRemote?.({remote:t,module:n,module_ns:m})}catch(h){console.warn("[fulgurjs] afterLoadRemote \\u89C2\\u6D4B\\u94A9\\u5B50\\u6267\\u884C\\u5931\\u8D25\\uFF1B\\u5DF2\\u52A0\\u8F7D\\u6A21\\u5757\\u4ECD\\u53EF\\u4F7F\\u7528\\u3002\\u8BF7\\u68C0\\u67E5\\u8BE5\\u94A9\\u5B50\\uFF1A",h)}if(m&&typeof m=="object"&&Object.keys(m).length===0){let h=new S(E.EMPTY_EXPORTS,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u7684\\u6A21\\u5757 "${n}" \\u6CA1\\u6709\\u4EFB\\u4F55\\u5BFC\\u51FA\\u3002\\u8BF7\\u68C0\\u67E5 exposes \\u6307\\u5411\\u7684\\u6587\\u4EF6\\u53CA\\u5176 export \\u58F0\\u660E\\u3002`,{remote:t,module:n});M({remote:t,error:h}),console.error(h.message)}return m}function pe(e){let r=c.get(e);if(!r)throw new S(E.REMOTE_UNKNOWN,`\\u672A\\u77E5\\u8FDC\\u7A0B\\u5E94\\u7528 "${e}"\\u3002\\u8BF7\\u5148\\u6CE8\\u518C\\u8BE5\\u8FDC\\u7A0B\\u5E94\\u7528\\u3002`,{remote:e});return X(r)}async function F(e,r={}){let{remote:t,module:n}=C(e),s=c.get(t);if(!s)throw new S(E.REMOTE_UNKNOWN,`\\u672A\\u77E5\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}"\\u3002\\u8BF7\\u5148\\u6CE8\\u518C\\u8BE5\\u8FDC\\u7A0B\\u5E94\\u7528\\u3002`,{remote:t});let o=r.mode??"preload",l=(d,R)=>{if(d.sheet)return Promise.resolve();let g=w.get(d);if(g)return g;let f=new Promise($=>{let v=()=>{d.removeEventListener("load",v),d.removeEventListener("error",O),$()},O=()=>{M({remote:t,error:new S(E.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u7684\\u6837\\u5F0F\\u8D44\\u6E90\\u52A0\\u8F7D\\u5931\\u8D25\\uFF1A${R}\\u3002\\u8BF7\\u68C0\\u67E5\\u6587\\u4EF6\\u662F\\u5426\\u5B58\\u5728\\u4EE5\\u53CA\\u8DE8\\u57DF\\u548C\\u7F13\\u5B58\\u914D\\u7F6E\\u3002`,{remote:t})}),v()};d.addEventListener("load",v,{once:!0}),d.addEventListener("error",O,{once:!0}),d.sheet&&v()});return w.set(d,f),f},m=(d,R)=>{if(typeof document>"u")return Promise.resolve();let g=document.querySelector(`link[href="${d}"]`);if(g)return R==="style"&&o==="preload"?w.get(g)??Promise.resolve():Promise.resolve();let f=document.createElement("link");f.rel=R==="style"?"stylesheet":"modulepreload",f.href=d,o==="prefetch"&&(f.fetchPriority="low");let $=R==="style"?l(f,d):Promise.resolve();return document.head.appendChild(f),R==="style"&&o==="preload"?$:Promise.resolve()},h=d=>{let R=typeof document<"u"?document.baseURI:void 0,g=new URL(s.entry,R||"http://fulgurjs.invalid/");return!g.pathname.endsWith("/")&&!g.pathname.split("/").pop().includes(".")&&(g.pathname+="/"),new URL(d,g).href};try{if(s.manifestUrl){let d=y.get(s.manifestUrl);d||(d=fetch(s.manifestUrl,{cache:"no-cache",signal:AbortSignal.timeout(8e3)}).then(g=>g.ok?g.json():void 0),y.set(s.manifestUrl,d),d.then(g=>{g||y.delete(s.manifestUrl)},()=>y.delete(s.manifestUrl)));let R=await d;if(R){let g=R.schemaVersion;if(typeof g=="number"&&(!Number.isInteger(g)||g>1)){M({remote:t,error:new S(E.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u7684 manifest \\u534F\\u8BAE\\u7248\\u672C\\u4E3A ${String(g)}\\uFF0C\\u5F53\\u524D\\u4EC5\\u652F\\u6301\\u7248\\u672C 1\\u3002\\u8BF7\\u7EDF\\u4E00\\u5BBF\\u4E3B\\u548C\\u8FDC\\u7A0B\\u7684\\u63D2\\u4EF6\\u7248\\u672C\\u3002`,{remote:t})}),await m(s.entry,"modulepreload");return}await m(s.entry,"modulepreload");let f=R.exposes,$=Array.isArray(f)?f.filter(_=>_&&typeof _=="object").map(_=>[String(_.name??""),_]):f&&typeof f=="object"?Object.entries(f):[],v=n?$.filter(([_,x])=>B(String(x?.name??_))===n):$,O=[];for(let[,_]of v)if(typeof _?.file=="string"&&await m(h(_.file),"modulepreload"),Array.isArray(_?.css))for(let x of _.css){if(typeof x!="string")continue;let de=m(h(x),"style");o==="preload"&&O.push(de)}await Promise.all(O);return}}await m(s.entry,"modulepreload")}catch(d){M({remote:t,error:new S(E.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u9884\\u52A0\\u8F7D\\u5931\\u8D25\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(d?.message??d)}\\u3002\\u8BF7\\u68C0\\u67E5 manifest \\u548C\\u8D44\\u6E90\\u5730\\u5740\\u3002`,{remote:t})})}}return typeof window>"u"||(window.__FULGURJS_SCOPE__=a,window.__FULGURJS_INFO__={get remotes(){let e={};for(let[r,t]of c)e[r]={...t.debug,entry:t.entry};return e},errors:[]}),{shareScopeMap:a,initSharing:oe,registerShare:se,registerRemotes:H,registerRemote:ae,registerPlugins:ce,loadShare:ue,getLoadedShare:le,loadRemote:me,getContainer:pe,preloadRemote:F,parseSpec:C,clearSessionState:ne}}var Y=globalThis,b=Y.__FULGURJS_RUNTIME__??Le();Y.__FULGURJS_RUNTIME__=b;try{Object.freeze(b)}catch{}var Fe=W;function De(){return b}var Ve=b.initSharing,Ke=b.registerShare,He=b.registerRemotes,qe=b.registerRemote,Ge=b.registerPlugins,Je=b.loadShare,Xe=b.getLoadedShare,Be=b.loadRemote,We=b.getContainer,ze=b.preloadRemote,Ye=b.parseSpec,Ze=b.clearSessionState,Qe=b.shareScopeMap;function er(a){if(a&&typeof a=="object"&&"default"in a){let c=a.default;return c!==void 0?c:a}return a}var rr=b;export{Ze as clearSessionState,rr as default,We as getContainer,Xe as getLoadedShare,De as getRuntime,Ve as initSharing,Be as loadRemote,Je as loadShare,Ye as parseSpec,ze as preloadRemote,Ge as registerPlugins,qe as registerRemote,He as registerRemotes,Ke as registerShare,b as runtime,Qe as shareScopeMap,er as unwrapDefault,Fe as version};\n';
|
|
2132
2185
|
|
|
2133
2186
|
// src/index.ts
|
|
2134
2187
|
function readRuntimeCode() {
|
|
@@ -2415,6 +2468,36 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2415
2468
|
}
|
|
2416
2469
|
}
|
|
2417
2470
|
}
|
|
2471
|
+
if (normalized.exposes.length > 0) {
|
|
2472
|
+
const userOutput3 = userConfig.build?.rollupOptions?.output;
|
|
2473
|
+
const reactDomChunkOf = (id) => /[\\/]node_modules[\\/]react-dom[\\/]/.test(id.split("?")[0]) ? "fulgurjs-remote-react-dom" : void 0;
|
|
2474
|
+
if (Array.isArray(userOutput3)) {
|
|
2475
|
+
console.warn(
|
|
2476
|
+
formatFulgurjsDiagnostic({
|
|
2477
|
+
code: "BLD-006",
|
|
2478
|
+
symptom: "build.rollupOptions.output \u662F\u6570\u7EC4\uFF0Cfulgurjs \u65E0\u6CD5\u81EA\u52A8\u6CE8\u5165\u8FDC\u7A0B react-dom chunk \u9694\u79BB",
|
|
2479
|
+
cause: 'expose \u5185\u52A8\u6001 import("react-dom/client") \u7684\u76EE\u6807\u53EF\u80FD\u88AB\u5408\u5E76\u8FDB\u72EC\u7ACB\u5165\u53E3 chunk\uFF0C\u5BB9\u5668\u52A0\u8F7D expose \u65F6\u8FDE\u5E26\u6267\u884C\u5165\u53E3\u5F15\u5BFC\u4EE3\u7801\uFF08React #299\uFF1A\u76EE\u6807\u5BB9\u5668\u4E0D\u5B58\u5728\uFF09',
|
|
2480
|
+
fix: "\u5728\u6BCF\u4E2A output \u9879\u7684 manualChunks \u6700\u524D\u9762\u52A0\u5206\u652F\uFF1Aif (/[/\\\\]node_modules[/\\\\]react-dom[/\\\\]/.test(id)) return 'fulgurjs-remote-react-dom'"
|
|
2481
|
+
})
|
|
2482
|
+
);
|
|
2483
|
+
} else {
|
|
2484
|
+
const extraBuild3 = extra.build ??= {};
|
|
2485
|
+
const previousOutput = extraBuild3.rollupOptions?.output;
|
|
2486
|
+
const previousMc = previousOutput?.manualChunks;
|
|
2487
|
+
const userManualChunks3 = userOutput3?.manualChunks;
|
|
2488
|
+
const userFn3 = typeof userManualChunks3 === "function" ? userManualChunks3 : void 0;
|
|
2489
|
+
const combined = (id, meta) => {
|
|
2490
|
+
const prev = previousMc?.(id, meta);
|
|
2491
|
+
if (prev !== void 0) return prev;
|
|
2492
|
+
const user = userFn3?.(id, meta);
|
|
2493
|
+
if (user !== void 0) return user;
|
|
2494
|
+
const facade = facadeChunkOf(id);
|
|
2495
|
+
if (facade) return facade;
|
|
2496
|
+
return reactDomChunkOf(id);
|
|
2497
|
+
};
|
|
2498
|
+
extraBuild3.rollupOptions = { ...extraBuild3.rollupOptions ?? {}, output: { manualChunks: combined } };
|
|
2499
|
+
}
|
|
2500
|
+
}
|
|
2418
2501
|
for (const w of normalized.warnings) console.warn(`[fulgurjs] ${w}`);
|
|
2419
2502
|
return extra;
|
|
2420
2503
|
},
|
|
@@ -2470,6 +2553,9 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2470
2553
|
if (bareClean === "virtual:fulgurjs-remote-schema") return bareClean;
|
|
2471
2554
|
if (bareClean === "virtual:fulgurjs-api-facade") return bareClean;
|
|
2472
2555
|
if (bareClean === "virtual:fulgurjs-api-facade-react") return bareClean;
|
|
2556
|
+
if (bareClean === "virtual:fulgurjs-api-facade-bridge") return bareClean;
|
|
2557
|
+
if (bareClean === "virtual:fulgurjs-api-facade-bridge-vue") return bareClean;
|
|
2558
|
+
if (bareClean === "virtual:fulgurjs-api-facade-bridge-react") return bareClean;
|
|
2473
2559
|
if (bareClean === "virtual:fulgurjs-provides") return RESOLVED.provides;
|
|
2474
2560
|
if (bareClean === "virtual:fulgurjs-remote-entry") return RESOLVED.remoteEntry;
|
|
2475
2561
|
if (state.command === "serve") {
|
|
@@ -2480,7 +2566,7 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2480
2566
|
return RESOLVED.sharedNsFacade(bareClean.slice(SHARED_NS_FACADE_PREFIX.length)) + query;
|
|
2481
2567
|
}
|
|
2482
2568
|
if (bareClean.startsWith("virtual:fulgurjs-cjs-ns:")) {
|
|
2483
|
-
return
|
|
2569
|
+
return bareClean + query;
|
|
2484
2570
|
}
|
|
2485
2571
|
if (bareClean.startsWith("virtual:fulgurjs-shared:")) {
|
|
2486
2572
|
const body = bareClean.slice("virtual:fulgurjs-shared:".length);
|
|
@@ -2488,7 +2574,7 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2488
2574
|
}
|
|
2489
2575
|
return null;
|
|
2490
2576
|
},
|
|
2491
|
-
load(id) {
|
|
2577
|
+
async load(id) {
|
|
2492
2578
|
if (id === "\0virtual:fulgurjs-react-refresh-shim") return genReactRefreshShim();
|
|
2493
2579
|
const raw = id.startsWith("\0") ? id.slice(1) : id;
|
|
2494
2580
|
const q = raw.indexOf("?");
|
|
@@ -2507,6 +2593,15 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2507
2593
|
if (clean === "virtual:fulgurjs-api-facade-react" && state.command === "serve") {
|
|
2508
2594
|
return genApiFacade("react");
|
|
2509
2595
|
}
|
|
2596
|
+
if (clean === "virtual:fulgurjs-api-facade-bridge" && state.command === "serve") {
|
|
2597
|
+
return genBridgeFacade("both");
|
|
2598
|
+
}
|
|
2599
|
+
if (clean === "virtual:fulgurjs-api-facade-bridge-vue" && state.command === "serve") {
|
|
2600
|
+
return genBridgeFacade("vue");
|
|
2601
|
+
}
|
|
2602
|
+
if (clean === "virtual:fulgurjs-api-facade-bridge-react" && state.command === "serve") {
|
|
2603
|
+
return genBridgeFacade("react");
|
|
2604
|
+
}
|
|
2510
2605
|
if (clean === "virtual:fulgurjs-remote-schema" && state.normalized) {
|
|
2511
2606
|
if (state.command === "build") return genEmptyRemoteSchemaModule();
|
|
2512
2607
|
remoteSchemaPromise ??= probeRemotesAndBuildSchema(state.normalized).then(
|
|
@@ -2517,6 +2612,24 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2517
2612
|
if (clean === "virtual:fulgurjs-remote-entry" && state.normalized) {
|
|
2518
2613
|
return genBuildRemoteEntry(state.normalized, state.exposeAbsPaths);
|
|
2519
2614
|
}
|
|
2615
|
+
if (clean.startsWith("virtual:fulgurjs-cjs-ns:") && state.normalized) {
|
|
2616
|
+
const body = clean.slice("virtual:fulgurjs-cjs-ns:".length);
|
|
2617
|
+
const item = state.normalized.shared.find((x) => x.shareKey === body);
|
|
2618
|
+
if (!item || item.import === false) return null;
|
|
2619
|
+
const names = enumerateCjsExports(item.import, state.normalized.root);
|
|
2620
|
+
if (item.shareKey === "vue") {
|
|
2621
|
+
for (const compat of ["isVue2", "isVue3", "Vue2", "set", "del"]) {
|
|
2622
|
+
if (!names.includes(compat)) names.push(compat);
|
|
2623
|
+
}
|
|
2624
|
+
}
|
|
2625
|
+
let importTarget = item.import;
|
|
2626
|
+
try {
|
|
2627
|
+
const resolvedImport = await this.resolve?.(item.import, path6.join(state.normalized.root, "package.json"), { skipSelf: true });
|
|
2628
|
+
if (resolvedImport?.id) importTarget = resolvedImport.id;
|
|
2629
|
+
} catch {
|
|
2630
|
+
}
|
|
2631
|
+
return genCjsNsFacade(item, names, importTarget);
|
|
2632
|
+
}
|
|
2520
2633
|
if (clean.startsWith(SHARED_NS_FACADE_PREFIX) && state.normalized) {
|
|
2521
2634
|
const body = clean.slice(SHARED_NS_FACADE_PREFIX.length);
|
|
2522
2635
|
const item = state.normalized.shared.find((x) => x.shareKey === body);
|
|
@@ -2565,8 +2678,7 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2565
2678
|
const clean = id.split("?")[0];
|
|
2566
2679
|
if (state.command === "build" && state.entryAbsPaths.has(clean) && !state.entryInitInjected.has(clean)) {
|
|
2567
2680
|
state.entryInitInjected.add(clean);
|
|
2568
|
-
|
|
2569
|
-
return { code: `${initCode}
|
|
2681
|
+
return { code: `import "virtual:fulgurjs-init";
|
|
2570
2682
|
${code}`, map: null };
|
|
2571
2683
|
}
|
|
2572
2684
|
const isPureRemoteBuild = state.normalized.exposes.length > 0 && state.normalized.remotes.length === 0;
|
|
@@ -2930,7 +3042,21 @@ ${entryChunk.code}`;
|
|
|
2930
3042
|
order: "post",
|
|
2931
3043
|
handler(html) {
|
|
2932
3044
|
if (state.command !== "serve" || !state.normalized) return html;
|
|
2933
|
-
if (!html.includes("/@react-refresh"))
|
|
3045
|
+
if (!html.includes("/@react-refresh")) {
|
|
3046
|
+
const hostConsumesReact = state.normalized.shared.some(
|
|
3047
|
+
(s) => s.shareKey === "react" || s.shareKey === "react-dom"
|
|
3048
|
+
);
|
|
3049
|
+
if (!hostConsumesReact) return html;
|
|
3050
|
+
const remoteOrigin = state.normalized.remotes.map((r) => {
|
|
3051
|
+
try {
|
|
3052
|
+
return new URL(r.devEntry).origin;
|
|
3053
|
+
} catch {
|
|
3054
|
+
return null;
|
|
3055
|
+
}
|
|
3056
|
+
}).find((o) => o !== null && /^https?:/.test(o ?? ""));
|
|
3057
|
+
if (!remoteOrigin) return html;
|
|
3058
|
+
return `<script type="module">import * as __fulgurjs_rr from ${JSON.stringify(`${remoteOrigin}/@react-refresh`)};try { __fulgurjs_rr.default?.injectIntoGlobalHook?.(window); } catch {}window.$RefreshReg$ = () => {};window.$RefreshSig$ = () => (type) => type;(globalThis).${REACT_REFRESH_GLOBAL_KEY} ??= __fulgurjs_rr;</script>` + html;
|
|
3059
|
+
}
|
|
2934
3060
|
const lastRef = html.lastIndexOf("/@react-refresh");
|
|
2935
3061
|
const scriptEnd = html.indexOf("</script>", lastRef);
|
|
2936
3062
|
if (scriptEnd === -1) return html;
|
|
@@ -2946,7 +3072,7 @@ ${entryChunk.code}`;
|
|
|
2946
3072
|
if (state.command !== "serve" || !state.normalized) return null;
|
|
2947
3073
|
const clean = id.split("?")[0];
|
|
2948
3074
|
let rewritten = code;
|
|
2949
|
-
if (code.includes('"/@react-refresh"')) {
|
|
3075
|
+
if (clean !== "\0virtual:fulgurjs-react-refresh-shim" && code.includes('"/@react-refresh"')) {
|
|
2950
3076
|
rewritten = rewritten.split('from "/@react-refresh"').join(`from "${REACT_REFRESH_SHIM_URL}"`).split('import("/@react-refresh")').join(`import("${REACT_REFRESH_SHIM_URL}")`);
|
|
2951
3077
|
}
|
|
2952
3078
|
if (clean.includes("vite/dist/client/client") && rewritten.includes("new ErrorOverlay(")) {
|
package/dist/react.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { ComponentType, ReactNode, Component, ErrorInfo } from 'react';
|
|
2
|
+
import { ComponentType, ReactNode, Component, ErrorInfo, ReactElement } from 'react';
|
|
3
3
|
|
|
4
4
|
/** 统一错误码体系(对齐 webpack ScriptExternalLoadError 等运行时错误的可诊断性) */
|
|
5
5
|
declare class FgError extends Error {
|
|
@@ -14,6 +14,8 @@ interface ShareEntry {
|
|
|
14
14
|
from: string;
|
|
15
15
|
eager: boolean;
|
|
16
16
|
loaded?: boolean;
|
|
17
|
+
/** 首次 loadShare 成功后缓存的实例值;getLoadedShare 同步查询与 CJS 垫片依赖它 */
|
|
18
|
+
value?: any;
|
|
17
19
|
}
|
|
18
20
|
type ShareScope = Record<string, Record<string, ShareEntry>>;
|
|
19
21
|
type ShareScopeMap = Record<string, ShareScope>;
|
|
@@ -123,6 +125,7 @@ declare function createRuntime(): {
|
|
|
123
125
|
registerRemote: (remote: RemoteConfig) => void;
|
|
124
126
|
registerPlugins: (list: RuntimePlugin[]) => void;
|
|
125
127
|
loadShare: (name: string, opts?: LoadShareOptions) => Promise<any>;
|
|
128
|
+
getLoadedShare: (name: string, opts?: LoadShareOptions) => any;
|
|
126
129
|
loadRemote: <T = Record<string, any>>(spec: string, opts?: LoadRemoteOptions) => Promise<T>;
|
|
127
130
|
getContainer: (name: string) => Promise<any>;
|
|
128
131
|
preloadRemote: (spec: string, opts?: PreloadRemoteOptions) => Promise<void>;
|
|
@@ -428,10 +431,52 @@ declare function getAppContext(): AppContext;
|
|
|
428
431
|
*/
|
|
429
432
|
declare function requireAppContext(...keys: string[]): AppContext;
|
|
430
433
|
|
|
434
|
+
/** 子应用桥接契约(远程 ./bridge 模块的默认导出;任务书 §3.2) */
|
|
435
|
+
interface BridgeApp {
|
|
436
|
+
/** 首次根提交完成时才算挂载成功;同一容器未卸载前重复 mount 是契约违例 */
|
|
437
|
+
mount(el: HTMLElement, props?: Record<string, unknown>): void | Promise<void>;
|
|
438
|
+
/** 同步使当前挂载代次失效并清理已创建的 root;未知容器为 no-op */
|
|
439
|
+
unmount(el: HTMLElement): void;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* React 子应用桥接适配(/react 导出 defineBridgeApp;任务书 §3.3 D2)。
|
|
444
|
+
*
|
|
445
|
+
* 工厂形态:接收 props 快照,返回 ReactElement;helper 负责 createRoot(el).render(...) /
|
|
446
|
+
* root.unmount() 与按容器 el 的实例跟踪。
|
|
447
|
+
*
|
|
448
|
+
* 首次根提交语义(任务书 §3.2/§3.3,BN02):
|
|
449
|
+
* - root.render() 返回不代表首次提交完成——helper 用「提交探针 + 首次渲染错误边界」兑现
|
|
450
|
+
* Promise 语义:mount 的 Promise 在探针 effect(首次提交后触发)时才 resolve;
|
|
451
|
+
* - 首次提交前的渲染错误经错误边界拒绝 mount 并清理 root,宿主转 MFU-016(phase: mount);
|
|
452
|
+
* - 首次提交后的错误不再由门控吞掉(settled 后原样上抛,交回 React 原生语义),
|
|
453
|
+
* 子应用内部错误由子应用自己的错误边界负责(§4.4)。
|
|
454
|
+
*
|
|
455
|
+
* react-dom/client 在实际 mount 时按需动态取得(BN04/BR01):
|
|
456
|
+
* 只使用 /react 既有 API 的消费者不因本文件存在而提前加载 react-dom/client 与桥接挂载逻辑。
|
|
457
|
+
*
|
|
458
|
+
* 本文件零 Vue:/react 导入图隔离由 tests/runtime-entry-graph.test.ts 守护。
|
|
459
|
+
*/
|
|
460
|
+
|
|
461
|
+
/** React 子应用工厂:接收挂载时 props 快照,返回 ReactElement(路由等由调用方自行包裹) */
|
|
462
|
+
type ReactBridgeAppFactory = (props: Record<string, unknown>) => ReactElement;
|
|
463
|
+
/**
|
|
464
|
+
* 定义 React 子应用的桥接契约(远程 ./bridge 模块默认导出)。
|
|
465
|
+
*
|
|
466
|
+
* ```tsx
|
|
467
|
+
* import { MemoryRouter } from 'react-router-dom'
|
|
468
|
+
* import { defineBridgeApp } from '@fulgurjs/federation/react'
|
|
469
|
+
* export default defineBridgeApp((props) => <MemoryRouter><App {...props} /></MemoryRouter>)
|
|
470
|
+
* ```
|
|
471
|
+
*/
|
|
472
|
+
declare function defineBridgeApp$1(factory: ReactBridgeAppFactory): BridgeApp;
|
|
473
|
+
|
|
431
474
|
declare const remoteComponent: <P = Record<string, unknown>>(spec: string, opts?: ReactRemoteComponentOptions) => react.ComponentType<P & {
|
|
432
475
|
ref?: react.Ref<unknown>;
|
|
433
476
|
}>;
|
|
434
477
|
declare const useLoadRemote: <Module = any>(spec: string, opts?: UseLoadRemoteOptions) => UseLoadRemoteResult<Module>;
|
|
478
|
+
/** React 子应用桥接契约(defineBridgeApp;远程 ./bridge 模块默认导出,任务书 §3.3) */
|
|
479
|
+
declare const defineBridgeApp: typeof defineBridgeApp$1;
|
|
435
480
|
/** 宿主页面适配器(绑定本包运行时的 loadRemote;选项与返回值类型见 react-adapter) */
|
|
436
481
|
declare function createReactHostPages(options: Parameters<typeof createReactHostPages$1>[0]): ReactHostPages;
|
|
437
482
|
|
|
@@ -439,4 +484,4 @@ type RemoteSchema = Record<string, RemoteSchemaEntry>;
|
|
|
439
484
|
/** 无插件转换的场景(构建、Node 导入)如实返回空清单。 */
|
|
440
485
|
declare const remoteSchema: RemoteSchema;
|
|
441
486
|
|
|
442
|
-
export { type AppContext, type FgRuntime, type LoadRemoteOptions, type LoadShareOptions, type PageRouteLike, type PageViolation, type PagesOptions, type PreloadRemoteOptions, type ReactHostPages, type ReactHostPagesOptions, type ReactRemoteComponentOptions, type RemoteConfig, type RemoteDebugInfo, RemoteErrorBoundary, type RemoteErrorBoundaryProps, type RemoteErrorFallback, type RemoteInput, type RemoteSchema, type RemoteSchemaEntry, type RemoteSetupContext, type RemoteSetupModule, type ResolvedHostPage, type RuntimeHooks, type RuntimePlugin, type ShareEntry, type ShareScope, type ShareScopeMap, type UseLoadRemoteOptions, type UseLoadRemoteResult, clearAppContext, createReactHostPages, definePages, getAppContext, getContainer, getRuntime, initSharing, loadRemote, loadShare, parseSpec, preloadRemote, provideAppContext, registerPlugins, registerRemote, registerRemotes, registerShare, remoteComponent, remoteSchema, requireAppContext, shareScopeMap, unwrapDefault, useLoadRemote, validatePages, version };
|
|
487
|
+
export { type AppContext, type BridgeApp, type FgRuntime, type LoadRemoteOptions, type LoadShareOptions, type PageRouteLike, type PageViolation, type PagesOptions, type PreloadRemoteOptions, type ReactBridgeAppFactory, type ReactHostPages, type ReactHostPagesOptions, type ReactRemoteComponentOptions, type RemoteConfig, type RemoteDebugInfo, RemoteErrorBoundary, type RemoteErrorBoundaryProps, type RemoteErrorFallback, type RemoteInput, type RemoteSchema, type RemoteSchemaEntry, type RemoteSetupContext, type RemoteSetupModule, type ResolvedHostPage, type RuntimeHooks, type RuntimePlugin, type ShareEntry, type ShareScope, type ShareScopeMap, type UseLoadRemoteOptions, type UseLoadRemoteResult, clearAppContext, createReactHostPages, defineBridgeApp, definePages, getAppContext, getContainer, getRuntime, initSharing, loadRemote, loadShare, parseSpec, preloadRemote, provideAppContext, registerPlugins, registerRemote, registerRemotes, registerShare, remoteComponent, remoteSchema, requireAppContext, shareScopeMap, unwrapDefault, useLoadRemote, validatePages, version };
|
package/dist/react.js
CHANGED
|
@@ -3,8 +3,10 @@ export { provideAppContext, getAppContext, requireAppContext, clearAppContext }
|
|
|
3
3
|
export { definePages, validatePages } from "./pages.js";
|
|
4
4
|
import { loadRemote } from "./runtime.js";
|
|
5
5
|
import { createRemoteComponent, createUseLoadRemote, RemoteErrorBoundary, createReactHostPages as createReactHostPagesWithLoader } from "./react-adapter.js";
|
|
6
|
+
import { defineBridgeApp as defineReactBridgeApp } from "./bridge-app-react.js";
|
|
6
7
|
export const remoteComponent = createRemoteComponent(loadRemote);
|
|
7
8
|
export const useLoadRemote = createUseLoadRemote(loadRemote);
|
|
8
9
|
export { RemoteErrorBoundary };
|
|
9
10
|
export const createReactHostPages = (options) => createReactHostPagesWithLoader(options, loadRemote);
|
|
11
|
+
export const defineBridgeApp = defineReactBridgeApp;
|
|
10
12
|
export const remoteSchema = {};
|
package/dist/runtime-entry.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as vue from 'vue';
|
|
2
|
-
import { Component } from 'vue';
|
|
2
|
+
import { Component, App } from 'vue';
|
|
3
3
|
|
|
4
4
|
/** 统一错误码体系(对齐 webpack ScriptExternalLoadError 等运行时错误的可诊断性) */
|
|
5
5
|
declare class FgError extends Error {
|
|
@@ -14,6 +14,8 @@ interface ShareEntry {
|
|
|
14
14
|
from: string;
|
|
15
15
|
eager: boolean;
|
|
16
16
|
loaded?: boolean;
|
|
17
|
+
/** 首次 loadShare 成功后缓存的实例值;getLoadedShare 同步查询与 CJS 垫片依赖它 */
|
|
18
|
+
value?: any;
|
|
17
19
|
}
|
|
18
20
|
type ShareScope = Record<string, Record<string, ShareEntry>>;
|
|
19
21
|
type ShareScopeMap = Record<string, ShareScope>;
|
|
@@ -123,6 +125,7 @@ declare function createRuntime(): {
|
|
|
123
125
|
registerRemote: (remote: RemoteConfig) => void;
|
|
124
126
|
registerPlugins: (list: RuntimePlugin[]) => void;
|
|
125
127
|
loadShare: (name: string, opts?: LoadShareOptions) => Promise<any>;
|
|
128
|
+
getLoadedShare: (name: string, opts?: LoadShareOptions) => any;
|
|
126
129
|
loadRemote: <T = Record<string, any>>(spec: string, opts?: LoadRemoteOptions) => Promise<T>;
|
|
127
130
|
getContainer: (name: string) => Promise<any>;
|
|
128
131
|
preloadRemote: (spec: string, opts?: PreloadRemoteOptions) => Promise<void>;
|
|
@@ -359,9 +362,48 @@ declare function createHostPages$1(options: HostPagesOptions, load: (spec: strin
|
|
|
359
362
|
retries?: number;
|
|
360
363
|
}) => Promise<any>): HostPages;
|
|
361
364
|
|
|
365
|
+
/** 子应用桥接契约(远程 ./bridge 模块的默认导出;任务书 §3.2) */
|
|
366
|
+
interface BridgeApp {
|
|
367
|
+
/** 首次根提交完成时才算挂载成功;同一容器未卸载前重复 mount 是契约违例 */
|
|
368
|
+
mount(el: HTMLElement, props?: Record<string, unknown>): void | Promise<void>;
|
|
369
|
+
/** 同步使当前挂载代次失效并清理已创建的 root;未知容器为 no-op */
|
|
370
|
+
unmount(el: HTMLElement): void;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Vue 子应用桥接适配(/runtime 导出 defineBridgeApp;任务书 §3.3 D1/D2)。
|
|
375
|
+
*
|
|
376
|
+
* 工厂形态:接收 props 快照,返回已装配完整的 VueApp(router/pinia 等由子应用自行装配);
|
|
377
|
+
* helper 负责 app.mount(el) / app.unmount() 与按容器 el 的实例跟踪。
|
|
378
|
+
*
|
|
379
|
+
* 契约语义(§3.2):
|
|
380
|
+
* - 契约实例按容器 el 分键(WeakMap):同一契约多处挂载互不干扰;
|
|
381
|
+
* - 同一容器未卸载再次 mount → MFU-016(phase: mount,容器已被占用)且不覆盖原实例;
|
|
382
|
+
* - Vue 的 app.mount 同步完成首次渲染,mount 成功即返回 void(首次根提交语义由 Vue 保证);
|
|
383
|
+
* - mount 抛错时清理已创建的 app(best-effort unmount),不留半挂状态;
|
|
384
|
+
* - unmount 未知容器为 no-op;unmount 抛错包装为 MFU-016(phase: unmount)由宿主捕获。
|
|
385
|
+
*
|
|
386
|
+
* 本文件零 React:/runtime 导入图隔离由 tests/runtime-entry-graph.test.ts 守护。
|
|
387
|
+
*/
|
|
388
|
+
|
|
389
|
+
/** Vue 子应用工厂:接收挂载时 props 快照,返回装配完成的 VueApp */
|
|
390
|
+
type VueBridgeAppFactory = (props: Record<string, unknown>) => App;
|
|
391
|
+
/**
|
|
392
|
+
* 定义 Vue 子应用的桥接契约(远程 ./bridge 模块默认导出)。
|
|
393
|
+
*
|
|
394
|
+
* ```ts
|
|
395
|
+
* import { createApp } from 'vue'
|
|
396
|
+
* import { defineBridgeApp } from '@fulgurjs/federation/runtime'
|
|
397
|
+
* export default defineBridgeApp((props) => { const app = createApp(App, props); app.use(router); return app })
|
|
398
|
+
* ```
|
|
399
|
+
*/
|
|
400
|
+
declare function defineBridgeApp$1(factory: VueBridgeAppFactory): BridgeApp;
|
|
401
|
+
|
|
362
402
|
declare const remoteComponent: (spec: string, opts?: RemoteComponentOptions) => vue.Component;
|
|
363
403
|
/** 宿主页面适配器(绑定本包运行时的 loadRemote;选项与返回值类型见 vue-adapter) */
|
|
364
404
|
declare function createHostPages(options: Parameters<typeof createHostPages$1>[0]): HostPages;
|
|
405
|
+
/** Vue 子应用桥接契约(defineBridgeApp;远程 ./bridge 模块默认导出,任务书 §3.3) */
|
|
406
|
+
declare const defineBridgeApp: typeof defineBridgeApp$1;
|
|
365
407
|
|
|
366
408
|
/** 浏览器应用唯一公开入口。 */
|
|
367
409
|
|
|
@@ -369,4 +411,4 @@ type RemoteSchema = Record<string, RemoteSchemaEntry>;
|
|
|
369
411
|
/** 无插件转换的场景(构建、Node 导入)如实返回空清单。 */
|
|
370
412
|
declare const remoteSchema: RemoteSchema;
|
|
371
413
|
|
|
372
|
-
export { type AppContext, type FgRuntime, type HostPages, type HostPagesOptions, type LoadRemoteOptions, type LoadShareOptions, type PageRouteLike, type PageViolation, type PagesOptions, type PreloadRemoteOptions, type RemoteComponentOptions, type RemoteConfig, type RemoteDebugInfo, type RemoteInput, type RemoteSchema, type RemoteSchemaEntry, type RemoteSetupContext, type RemoteSetupModule, type ResolvedHostPage, type RuntimeHooks, type RuntimePlugin, type ShareEntry, type ShareScope, type ShareScopeMap, clearAppContext, createHostPages, definePages, getAppContext, getContainer, getRuntime, initSharing, loadRemote, loadShare, parseSpec, preloadRemote, provideAppContext, registerPlugins, registerRemote, registerRemotes, registerShare, remoteComponent, remoteSchema, requireAppContext, shareScopeMap, unwrapDefault, validatePages, version };
|
|
414
|
+
export { type AppContext, type BridgeApp, type FgRuntime, type HostPages, type HostPagesOptions, type LoadRemoteOptions, type LoadShareOptions, type PageRouteLike, type PageViolation, type PagesOptions, type PreloadRemoteOptions, type RemoteComponentOptions, type RemoteConfig, type RemoteDebugInfo, type RemoteInput, type RemoteSchema, type RemoteSchemaEntry, type RemoteSetupContext, type RemoteSetupModule, type ResolvedHostPage, type RuntimeHooks, type RuntimePlugin, type ShareEntry, type ShareScope, type ShareScopeMap, type VueBridgeAppFactory, clearAppContext, createHostPages, defineBridgeApp, definePages, getAppContext, getContainer, getRuntime, initSharing, loadRemote, loadShare, parseSpec, preloadRemote, provideAppContext, registerPlugins, registerRemote, registerRemotes, registerShare, remoteComponent, remoteSchema, requireAppContext, shareScopeMap, unwrapDefault, validatePages, version };
|
package/dist/runtime-entry.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { initSharing, registerShare, registerRemotes, registerRemote, registerPlugins, loadShare, loadRemote, getContainer, preloadRemote, parseSpec, getRuntime, shareScopeMap, unwrapDefault, version, clearSessionState } from "./runtime.js";
|
|
2
2
|
export { provideAppContext, getAppContext, requireAppContext, clearAppContext } from "./context.js";
|
|
3
3
|
export { definePages, validatePages } from "./pages.js";
|
|
4
|
-
export { remoteComponent, createHostPages } from "./vue.js";
|
|
4
|
+
export { remoteComponent, createHostPages, defineBridgeApp } from "./vue.js";
|
|
5
5
|
export const remoteSchema = {};
|