@fulgurjs/federation 5.3.2 → 5.4.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/CHANGELOG.md +15 -0
- package/DESIGN.md +4 -0
- package/README.en.md +26 -4
- package/README.md +85 -1
- package/dist/bridge-app-react.cjs +14 -4
- package/dist/bridge-app-react.d.cts +16 -4
- package/dist/bridge-app-react.d.ts +16 -4
- package/dist/bridge-app-react.js +6 -4
- package/dist/bridge-app-vue.cjs +55 -9
- package/dist/bridge-app-vue.d.cts +25 -4
- package/dist/bridge-app-vue.d.ts +25 -4
- package/dist/bridge-app-vue.js +47 -9
- package/dist/bridge-core-BOWvVUxO.d.ts +91 -0
- package/dist/bridge-core.cjs +9 -1
- package/dist/bridge-core.d.cts +8 -1
- package/dist/bridge-core.d.ts +8 -1
- package/dist/bridge-core.js +2 -2
- package/dist/bridge-errors.cjs +55 -3
- package/dist/bridge-errors.d.cts +18 -2
- package/dist/bridge-errors.d.ts +18 -2
- package/dist/bridge-errors.js +11 -3
- package/dist/{bridge-host-react-C55RmGll.d.ts → bridge-host-react-CMVd-ym0.d.ts} +1 -1
- package/dist/bridge-host-react.cjs +324 -3
- package/dist/bridge-host-react.d.cts +2 -0
- package/dist/bridge-host-react.d.ts +2 -0
- package/dist/bridge-host-react.js +30 -4
- package/dist/{bridge-host-vue-BAxDKqGH.d.ts → bridge-host-vue-BuCGlLdS.d.ts} +1 -1
- package/dist/bridge-host-vue.cjs +335 -3
- package/dist/bridge-host-vue.js +42 -5
- package/dist/bridge-react.d.ts +5 -3
- package/dist/bridge-router-core-BxBx-reP.d.cts +44 -0
- package/dist/bridge-router-core-BxBx-reP.d.ts +44 -0
- package/dist/bridge-router-react.d.ts +96 -0
- package/dist/bridge-router-react.js +70 -0
- package/dist/bridge-router-vue.d.ts +75 -0
- package/dist/bridge-router-vue.js +73 -0
- package/dist/bridge-vue.d.ts +2 -2
- package/dist/bridge.d.ts +6 -4
- package/dist/{chunk-TOT3P7AK.js → chunk-BTJGYDHT.js} +412 -27
- package/dist/{chunk-MMXKQN2H.js → chunk-GF6KOH67.js} +39 -4
- package/dist/{chunk-DH2QMM4Y.js → chunk-JQF7KYZF.js} +50 -2
- package/dist/{chunk-X4F2BHNM.js → chunk-OXEAGRPY.js} +27 -3
- package/dist/{chunk-LE2G23E7.js → chunk-PRUYHYX2.js} +1 -1
- package/dist/chunk-WOTR2FUQ.js +266 -0
- package/dist/index.cjs +136 -15
- package/dist/index.js +136 -15
- package/dist/react.d.ts +56 -4
- package/dist/runtime-entry.d.ts +65 -4
- package/dist/runtime.js +18 -18
- package/examples/bridge/react-host/package-lock.json +107 -106
- package/examples/bridge/react-host/package.json +1 -1
- package/examples/bridge/react-remote/package-lock.json +107 -106
- package/examples/bridge/react-remote/package.json +1 -1
- package/examples/bridge/vue-host/package-lock.json +107 -106
- package/examples/bridge/vue-host/package.json +1 -1
- package/examples/bridge/vue-remote/package-lock.json +107 -106
- package/examples/bridge/vue-remote/package.json +1 -1
- package/examples/react/host/package-lock.json +3 -3
- package/examples/react/host/package.json +1 -1
- package/examples/react/remote/package-lock.json +3 -3
- package/examples/react/remote/package.json +1 -1
- package/examples/vue/host/package-lock.json +3 -3
- package/examples/vue/host/package.json +1 -1
- package/examples/vue/remote/package-lock.json +3 -3
- package/examples/vue/remote/package.json +1 -1
- package/package.json +28 -4
- package/dist/bridge-core-6uLJiMVa.d.ts +0 -42
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.4.0";
|
|
12
12
|
|
|
13
13
|
// src/dev-cors.ts
|
|
14
14
|
function normalizeDevCorsOrigins(input) {
|
|
@@ -690,14 +690,20 @@ function genCjsNsFacade(item, exportNames, importTarget) {
|
|
|
690
690
|
`shareScope: ${JSON.stringify(item.shareScope)}`,
|
|
691
691
|
`shareKey: ${JSON.stringify(item.shareKey)}`,
|
|
692
692
|
...item.requiredVersion !== false ? [`requiredVersion: ${JSON.stringify(item.requiredVersion)}`] : [],
|
|
693
|
-
...item.singleton ? ["singleton: true"] : []
|
|
693
|
+
...item.singleton ? ["singleton: true"] : [],
|
|
694
|
+
...item.strictVersion ? ["strictVersion: true"] : []
|
|
694
695
|
];
|
|
695
696
|
const lines = [
|
|
696
|
-
`import { getLoadedShare as __fulgurjs_gls, unwrapDefault as __fulgurjsU } from "virtual:fulgurjs-runtime";`,
|
|
697
|
+
`import { getLoadedShare as __fulgurjs_gls, pinLoadedShare as __fulgurjs_pin, unwrapDefault as __fulgurjsU } from "virtual:fulgurjs-runtime";`,
|
|
697
698
|
// importTarget 为 load 期解析出的绝对 id(proxy 虚拟 id 上下文里裸包名无法 node 解析);
|
|
698
699
|
// 兜底保留裸包名(与命名空间门面同语义,无 proxy 载体时可解析)
|
|
699
700
|
`import * as __fulgurjs_local from ${JSON.stringify(importTarget ?? item.import)};`,
|
|
700
|
-
`const
|
|
701
|
+
`const __fulgurjs_snap = __fulgurjs_gls(${JSON.stringify(item.shareKey)}, { ${opts.join(", ")} });`,
|
|
702
|
+
// 未命中同步快照:把本地副本登记为将选中的共享条目(版本一致且条目未就绪时生效),
|
|
703
|
+
// 使先于 TLA 门面求值的垫片(jsx-runtime 拖入 provider chunk 的场景)与后续协商
|
|
704
|
+
// 收敛到同一份实例,杜绝单例双实例。
|
|
705
|
+
`if (__fulgurjs_snap === undefined) __fulgurjs_pin(${JSON.stringify(item.shareKey)}, { ${opts.join(", ")} }, ${JSON.stringify(item.version)}, __fulgurjs_local);`,
|
|
706
|
+
`const __fulgurjs_m = __fulgurjs_snap ?? __fulgurjs_local;`,
|
|
701
707
|
`const __fulgurjs_d = __fulgurjsU(__fulgurjs_m);`,
|
|
702
708
|
`export default __fulgurjs_d;`
|
|
703
709
|
];
|
|
@@ -1212,6 +1218,7 @@ function serializeShareCallForFacade(item, fallbackUrl) {
|
|
|
1212
1218
|
if (item.requiredVersion !== false) opts.push(`requiredVersion: ${JSON.stringify(item.requiredVersion)}`);
|
|
1213
1219
|
if (item.singleton) opts.push("singleton: true");
|
|
1214
1220
|
if (item.strictVersion) opts.push("strictVersion: true");
|
|
1221
|
+
opts.push(`localVersion: ${JSON.stringify(item.version)}`);
|
|
1215
1222
|
if (item.import !== false) {
|
|
1216
1223
|
const facadeUrl = fallbackUrl ?? SHARED_FACADE_PREFIX + item.shareKey;
|
|
1217
1224
|
opts.push(`fallback: () => import(${JSON.stringify(facadeUrl)})`);
|
|
@@ -1225,6 +1232,7 @@ function serializeShareCall(item, devUrls) {
|
|
|
1225
1232
|
if (item.requiredVersion !== false) opts.push(`requiredVersion: ${JSON.stringify(item.requiredVersion)}`);
|
|
1226
1233
|
if (item.singleton) opts.push("singleton: true");
|
|
1227
1234
|
if (item.strictVersion) opts.push("strictVersion: true");
|
|
1235
|
+
opts.push(`localVersion: ${JSON.stringify(item.version)}`);
|
|
1228
1236
|
if (item.import !== false) {
|
|
1229
1237
|
const facadeUrl = devUrls ? devUrls.namespaceFacade(item.shareKey) : SHARED_FACADE_PREFIX + item.shareKey;
|
|
1230
1238
|
opts.push(`fallback: () => import(${JSON.stringify(facadeUrl)})`);
|
|
@@ -1264,6 +1272,7 @@ function inSharedClosure(moduleId, roots) {
|
|
|
1264
1272
|
}
|
|
1265
1273
|
function isTransformableId(id, allowNodeModules = false) {
|
|
1266
1274
|
const clean = id.split("?")[0];
|
|
1275
|
+
if (clean.startsWith("virtual:fulgurjs-")) return false;
|
|
1267
1276
|
if (!JS_EXT_RE.test(clean) && !clean.endsWith(".vue")) return false;
|
|
1268
1277
|
if (clean.includes("node_modules") && !allowNodeModules) return false;
|
|
1269
1278
|
return true;
|
|
@@ -1285,12 +1294,17 @@ function getFacadeEntry(id) {
|
|
|
1285
1294
|
}
|
|
1286
1295
|
function canonicalBindings(bindings) {
|
|
1287
1296
|
const names = /* @__PURE__ */ new Set();
|
|
1297
|
+
let hasDefault = false;
|
|
1288
1298
|
for (const bRaw of bindings) {
|
|
1289
|
-
if (bRaw === "default")
|
|
1299
|
+
if (bRaw === "default") {
|
|
1300
|
+
hasDefault = true;
|
|
1301
|
+
continue;
|
|
1302
|
+
}
|
|
1290
1303
|
const asMatch = bRaw.match(/^(.*?)\s+as\s+(.+)$/);
|
|
1291
1304
|
names.add((asMatch ? asMatch[1] : bRaw).trim());
|
|
1292
1305
|
}
|
|
1293
|
-
return [...names].sort();
|
|
1306
|
+
if (names.size > 0) return [...names].sort();
|
|
1307
|
+
return hasDefault ? ["default"] : [];
|
|
1294
1308
|
}
|
|
1295
1309
|
function bindingFacadeId(item, bindings) {
|
|
1296
1310
|
const canonical = canonicalBindings(bindings);
|
|
@@ -1312,13 +1326,14 @@ function remoteFacadeSpecFor(ctx, remoteName, exposeName, bindings) {
|
|
|
1312
1326
|
}
|
|
1313
1327
|
async function transformModule(code, id, ctx) {
|
|
1314
1328
|
const { options } = ctx;
|
|
1315
|
-
const clean = id.split("?")[0];
|
|
1329
|
+
const clean = id.split("?")[0].replace(/^\0/, "");
|
|
1330
|
+
if (clean.startsWith("virtual:fulgurjs-")) return null;
|
|
1316
1331
|
if (options.shared.length === 0 && options.remotes.length === 0) return null;
|
|
1317
1332
|
const candidates = [];
|
|
1318
1333
|
for (const s2 of options.shared) candidates.push(s2.configKey.replace(/\/$/, ""));
|
|
1319
1334
|
for (const r of options.remotes) candidates.push(r.key);
|
|
1320
1335
|
if (!candidates.some((c) => code.includes(c))) return null;
|
|
1321
|
-
if (ctx.cjsRequireRewrite && /require\s*\(\s*["']/.test(code)) {
|
|
1336
|
+
if (ctx.cjsRequireRewrite && !inSharedClosure(clean, ctx.sharedClosureRoots) && /require\s*\(\s*["']/.test(code)) {
|
|
1322
1337
|
const sharedByAlias = /* @__PURE__ */ new Map();
|
|
1323
1338
|
for (const s2 of options.shared) {
|
|
1324
1339
|
if (s2.import === false) continue;
|
|
@@ -2181,7 +2196,7 @@ function syncViteCacheMarker(root, pluginVersion, log) {
|
|
|
2181
2196
|
}
|
|
2182
2197
|
|
|
2183
2198
|
// src/runtime-code.gen.ts
|
|
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.2";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';
|
|
2199
|
+
var runtime_code_gen_default = 'var Re=/^v?(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:-((?:[0-9A-Za-z-]+)(?:\\.[0-9A-Za-z-]+)*))?(?:\\+[0-9A-Za-z.-]+)?$/;function N(a){let c=Re.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 we(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 h=a[i],y=c[i];if(h===void 0)return-1;if(y===void 0)return 1;let w=/^\\d+$/.test(h),P=/^\\d+$/.test(y);if(w&&P){let I=Number(h)-Number(y);if(I!==0)return I}else{if(w!==P)return w?-1:1;if(h!==y)return h<y?-1:1}}return 0}function T(a,c){let u=N(a),i=N(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:we(u.pre,i.pre)}var be=/^[a-z]+[+:-]/i;function U(a,c){if(c===!1||c==null||c==="")return!0;let u=String(c).trim();return!u||u==="*"||u==="latest"||be.test(u)?!0:u.split("||").some(i=>Pe(a,i.trim()))}function Pe(a,c){if(!c||c==="*")return!N(a)?.pre.length;let u=c.split(/\\s+-\\s+/);if(u.length===2){let y=u[0].trim(),w=u[1].trim();return!(!U(a,`>=${y}`)||!U(a,`<=${w}`))}let i=N(a);if(!i)return!1;let h=ve(c);if(h===null)return!0;for(let y of h)if(!Oe(i,a,y))return!1;return!(i.pre.length>0&&!h.some(y=>y.ver.pre.length>0)&&!h.some(w=>w.ver.major===i.major&&w.ver.minor===i.minor&&w.ver.patch===i.patch))}function ve(a){let c=[],u=a.trim().split(/\\s+/).filter(Boolean);if(u.length===0)return null;for(let i of u){let h=/^(>=|<=|>|<|=|\\^|~)?(.*)$/.exec(i);if(!h)return null;let y=h[1],w=h[2],P=$e(y,w);if(P===null)return null;c.push(...P)}return c}function $e(a,c){let u=Me(c);if(!u)return null;let{ver:i,partial:h}=u;switch(a){case"^":{let y=_e(i);return y?[{op:">=",ver:i},{op:"<",ver:y}]:null}case"~":{let y=h>=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 h===1?[{op:">=",ver:{major:i.major+1,minor:0,patch:0,pre:[]}}]:h===2?[{op:">=",ver:{major:i.major,minor:i.minor+1,patch:0,pre:[]}}]:[{op:">",ver:i}];case"<":return h===1?[{op:"<",ver:{major:i.major,minor:0,patch:0,pre:[]}}]:h===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 h===1?[{op:">=",ver:i},{op:"<",ver:{major:i.major+1,minor:0,patch:0,pre:[]}}]:h===2?[{op:">=",ver:i},{op:"<",ver:{major:i.major,minor:i.minor+1,patch:0,pre:[]}}]:[{op:"=",ver:i}];default:return null}}function _e(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 Me(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=[],h=0;for(let P of u.slice(0,3))if(/^\\d+$/.test(P))i.push(Number(P)),h++;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 h===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:h}}function Le(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 Oe(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 h=T(i,`${u.ver.major}.${u.ver.minor}.${u.ver.patch}`+(u.ver.pre.length?`-${u.ver.pre.join(".")}`:"")),y=Le(h,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,h){super(`[fulgurjs:${c}] ${u}`,h),this.name="FgError",this.code=c,this.details=i}},R={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 Q="5.4.0";var Ie="__fulgurjsSetup",Te="__FULGURJS_APP_CONFIG__",G=15e3,ee=2,xe=5,ke=3e4,je=4e3,Ne=.2;function Ue(){let a=Object.create(null),c=new Map,u=[],i=new Set,h=new Map,y=(e,r)=>JSON.stringify([r.shareScope||"default",r.shareKey||e,r.requiredVersion??null,!!r.singleton,!!r.strictVersion]),w=new Map,P=new Map,I=new WeakMap,A=new WeakMap,O={},ne=()=>{for(let e of u)try{e.init?.(O)}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)}},C=new Map,F,te=e=>{let r=C.get(e);return r||C.set(e,r={}),r},H=()=>globalThis[Te]??{};async function q(e,r,n,s){let o=l=>l instanceof S?l:new S(R.SETUP_RUN_FAILED,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e}" \\u7684 ${s} \\u521D\\u59CB\\u5316\\u5931\\u8D25\\u3002\n\\u539F\\u56E0\\uFF1A${String(l?.message??l)}\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:l});F=e;let t;try{t=r(n)}catch(l){throw o(l)}finally{F=void 0}try{await t}catch(l){throw o(l)}}async function oe(e,r,n,s){e.debug.setup="pending";try{if(e.manifestUrl)try{await K(`${e.name}/${n}`)}catch{}let o=await r.get(n),t=o?.default;if(typeof t!="function")throw new S(R.SETUP_INVALID_EXPORT,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 setup \\u6A21\\u5757 "${n}" \\u65E0\\u6CD5\\u521D\\u59CB\\u5316\\u3002\n\\u539F\\u56E0\\uFF1A\\u9ED8\\u8BA4\\u5BFC\\u51FA\\u7C7B\\u578B\\u4E3A ${o==null?String(o):typeof t}\\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:n});if(o.onSession!==void 0&&typeof o.onSession!="function")throw new S(R.SETUP_INVALID_EXPORT,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 setup \\u6A21\\u5757 "${n}" \\u65E0\\u6CD5\\u521D\\u59CB\\u5316\\u3002\n\\u539F\\u56E0\\uFF1AonSession \\u5BFC\\u51FA\\u7C7B\\u578B\\u4E3A ${typeof o.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:n});s.setupExports=o,await q(e.name,t,{appContext:H(),signal:(s.controller??=new AbortController).signal},"setup"),e.debug.setup="ready"}catch(o){throw e.debug.setup="failed",s.setupExports=void 0,o}}async function se(e,r,n){let s=H(),o=s?.sessionKey;if(typeof o!="string"||o==="")throw new S(R.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 ${o===void 0?"\\u7F3A\\u5931":JSON.stringify(o)}\\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===o)return r.sessionPromise;r.controller?.abort();let t=new AbortController;r.controller=t,r.sessionKey=o;let l=r.sessionPromise?r.sessionPromise.catch(()=>{}):Promise.resolve(),d=(async()=>{await l,!t.signal.aborted&&await q(e.name,n,{appContext:s,sessionKey:o,signal:t.signal},"onSession")})();return r.sessionPromise=d,d.catch(()=>{r.sessionKey===o&&(r.sessionKey=void 0,r.sessionPromise=void 0)}),d}async function ie(e,r){let n=r?.[Ie];if(typeof n!="string"||n==="")return;let s=te(e.name);s.setupPromise||(s.setupPromise=oe(e,r,n,s).catch(t=>{throw s.setupPromise=void 0,t})),await s.setupPromise;let o=s.setupExports?.onSession;typeof o=="function"&&await se(e,s,o)}function ae(){for(let e of C.values()){try{e.controller?.abort()}catch{}e.sessionKey=void 0,e.sessionPromise=void 0}}let x=e=>a[e]??=Object.create(null);function v(e){try{O.onRemoteError?.(e)}catch{}typeof window<"u"&&window.dispatchEvent(new CustomEvent("fulgurjs:error",{detail:e}))}function ce(e="default"){return x(e),a}function J(e,r,n,s,o={}){let t=x(e||"default"),l=Object.hasOwn(t,r)?t[r]:void 0,d=l&&typeof l=="object"?l:void 0;d||(d=Object.create(null),t[r]=d),!(Object.hasOwn(d,n)&&d[n])&&(d[n]={version:n,get:s,from:o.from??"unknown",eager:!!o.eager,loaded:!!o.loaded})}function ue(e){let r=(n,s,o)=>{if(n===void 0)return;if(!(typeof n=="number"&&(o?Number.isInteger(n)&&n>=0&&n<=10:Number.isFinite(n)&&n>0)))throw new Error(`[fulgurjs] \\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 ${s} \\u914D\\u7F6E\\u65E0\\u6548\\uFF1A\\u5F53\\u524D\\u4E3A ${String(n)}\\uFF0C\\u5E94\\u4E3A${o?" 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 X(e){for(let r of e){ue(r);let n=c.get(r.name);c.set(r.name,{timeout:G,retries:ee,...n,...r,breakerThreshold:r.breaker?.threshold??n?.breakerThreshold??xe,breakerResetMs:r.breaker?.resetMs??n?.breakerResetMs??ke,state:n?.state??"idle",breakerState:n?.breakerState??{fails:0,openUntil:0},entryInflight:n?.entryInflight??new Map,entryFailCounts:n?.entryFailCounts??new Map,debug:n?.debug??{entry:r.entry,status:"idle",setup:"none"}})}}function le(e){X([e])}function fe(e){u.push(...e),h.clear(),ne()}function k(e,r,n=!1){let s=r.shareScope||"default",o=r.shareKey||e,l=x(s)[o]||{},d=Object.keys(l).filter(m=>!n||r.singleton||l[m].value!==void 0);if(n&&d.length===0)return;let f=r.requiredVersion,p=d.filter(m=>f===void 0||f===!1||U(m,f)),E;if(r.singleton&&d.length>0){let m=d.filter(g=>l[g].loaded);if(E=[...m.length?m:d].sort(T).pop(),!p.includes(E)){let g=l[E],M=`\\u73B0\\u8C61\\uFF1A\\u5171\\u4EAB\\u5355\\u4F8B "${o}" \\u7684\\u5B9E\\u9645\\u7248\\u672C\\u4E0D\\u6EE1\\u8DB3\\u5F53\\u524D\\u5E94\\u7528\\u8981\\u6C42\\u3002\n\\u539F\\u56E0\\uFF1A\\u5E94\\u7528\\u8981\\u6C42 ${f??"\\u4EFB\\u610F\\u7248\\u672C"}\\uFF0C\\u4F5C\\u7528\\u57DF\\u4E2D\\u6709 ${d.join("\\u3001")}\\uFF1B\\u4E3A\\u4FDD\\u8BC1\\u5168\\u9875\\u53EA\\u4F7F\\u7528\\u4E00\\u4E2A\\u5B9E\\u4F8B\\uFF0C\\u6700\\u7EC8\\u590D\\u7528 ${g.from} \\u63D0\\u4F9B\\u7684 ${E}\\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 L=new S(R.SHARE_STRICT_VERSION,M,{shareKey:o,requiredVersion:f});throw v({remote:g.from,error:L}),L}let $=`${s}|${o}|${f??"*"}|${E}|${d.join(",")}`;i.has($)||(i.add($),console.warn(`[fulgurjs:MFU-010] ${M}`))}}else if(E=[...p].sort(T).pop(),!E){if(r.strictVersion){let m=new S(R.SHARE_STRICT_VERSION,`\\u73B0\\u8C61\\uFF1A\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${s}" \\u4E2D\\u627E\\u4E0D\\u5230\\u7B26\\u5408\\u8981\\u6C42\\u7684 "${o}"\\u3002\n\\u539F\\u56E0\\uFF1A\\u8981\\u6C42\\u7248\\u672C ${f}\\uFF0C\\u5F53\\u524D\\u53EF\\u7528\\u7248\\u672C\\u4E3A ${d.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 v({remote:o,error:m}),m}return}return l[E]}function de(e,r,n){let s=r.localVersion;if(!s||n===void 0)return;let o=r.shareScope||"default",t=r.shareKey||e,l=x(o),d=Object.hasOwn(l,t)?l[t]:void 0;if(d&&Object.keys(d).length>0){try{let p=k(e,r);p&&p.value===void 0&&p.version===s&&(p.value=n,p.loaded=!0)}catch{}return}J(o,t,s,()=>Promise.resolve(n),{from:"fulgurjs:local-fallback",loaded:!0});let f=l[t]?.[s];f&&(f.value=n)}async function me(e,r={}){let n=r.shareScope||"default",s=r.shareKey||e,o=x(n)[s]||{},t=k(e,r);if(!t){if(r.fallback){let p=await r.fallback();return de(e,r,p),p}let f=new S(R.SHARE_NOT_AVAILABLE,`\\u73B0\\u8C61\\uFF1A\\u65E0\\u6CD5\\u52A0\\u8F7D\\u5171\\u4EAB\\u4F9D\\u8D56 "${s}"\\u3002\n\\u539F\\u56E0\\uFF1A\\u4F5C\\u7528\\u57DF "${n}" \\u4E2D\\u6CA1\\u6709\\u7B26\\u5408 ${r.requiredVersion??"\\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:r.requiredVersion});throw v({remote:s,error:f}),f}if(O.resolveShare){let f=await O.resolveShare({shareKey:s,shareScope:n,requiredVersion:r.requiredVersion,picked:t,available:Object.values(o)});f&&(t=f)}if(t.value!==void 0)return h.set(y(e,r),t),t.value;if(t.loaded=!0,!t.pendingGet)try{t.pendingGet=t.get()}catch(f){t.pendingGet=Promise.reject(f)}let l=t.pendingGet,d;try{d=await l}catch(f){if(t.value!==void 0)return h.set(y(e,r),t),t.value;throw t.loaded=!1,f}finally{t.pendingGet===l&&(t.pendingGet=void 0)}return t.value===void 0&&(t.value=d),h.set(y(e,r),t),t.value}function pe(e,r={}){return O.resolveShare?h.get(y(e,r))?.value:k(e,r,!0)?.value}function ge(e,r,n,s){if(s===void 0)return;let o;try{o=k(e,r)}catch{return}!o||o.value!==void 0||o.version!==n||(o.value=s,o.loaded=!0)}function B(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 W(e,r,n){return new Promise((s,o)=>{let t=setTimeout(()=>o(new Error(`\\u7B49\\u5F85\\u8D85\\u8FC7 ${r} \\u6BEB\\u79D2\\uFF1A${n}`)),r);e.then(l=>{clearTimeout(t),s(l)},l=>{clearTimeout(t),o(l)})})}let he=e=>new Promise(r=>setTimeout(r,e));function V(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 n=`\\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] ${n} \\u5F53\\u524D\\u662F\\u52A8\\u6001 Promise \\u8FDC\\u7A0B\\uFF0C\\u7EE7\\u7EED\\u52A0\\u8F7D\\u3002`);else throw Object.assign(new Error(n),{code:R.REMOTE_NAME_MISMATCH})}}async function z(e,r){let n=r.entryFailCounts.get(e)??0,s=n>0?`${e}${e.includes("?")?"&":"?"}fulgurjs_retry=${n}`:e,o=r.entryInflight.get(e),t=o??import(s);return o||(r.entryInflight.set(e,t),t.catch(()=>{r.entryInflight.delete(e),r.entryFailCounts.set(e,(r.entryFailCounts.get(e)??0)+1)})),W(t,r.timeout??G,`\\u52A0\\u8F7D\\u8FDC\\u7A0B\\u5165\\u53E3 ${B(e)}`)}async function Y(e,r){let n=e.shareScope||"default";if(e.container){let t=A.get(e.container);if(t&&t!==n)throw new S(R.CONTAINER_REINIT_CONFLICT,`\\u8FDC\\u7A0B\\u5BB9\\u5668 "${e.name}" \\u5DF2\\u4F7F\\u7528\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${t}" \\u521D\\u59CB\\u5316\\uFF0C\\u4E0D\\u80FD\\u518D\\u4EE5 "${n}" \\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 t=new S(R.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 v({remote:e.name,error:t}),t}e.state="loading",e.debug.status="loading";let o=(async()=>{let t=[];if(e.promise)t.push(async()=>{let m=await W(e.promise(),e.timeout??G,`\\u89E3\\u6790\\u52A8\\u6001\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}"`),g=typeof m=="string"?await z(m,e):m;return V(g,e),g});else for(let m of[e.entry,...e.fallback??[]])t.push(async()=>{let g=await z(m,e);return V(g,e),g});let l,d,f=!1,p=r?.retries??e.retries??ee;for(let m of t){for(let g=0;g<=p;g++){let M=performance.now();try{l=await m(),e.lastLoadMs=Math.round(performance.now()-M),e.debug.lastLoadMs=e.lastLoadMs,f=!0;break}catch($){if(d=$,$?.code)throw $;g<p&&await he(Math.min(je,200*2**g)*(1-Ne*(1-2*Math.random())))}}if(f)break}if(!f||!l){let m=B(e.entry),g=[];throw/^https?:\\/\\//.test(e.entry)&&typeof location<"u"?(g.push(`1. \\u5728\\u6D4F\\u89C8\\u5668\\u6253\\u5F00 ${m}\\uFF0C\\u786E\\u8BA4\\u8FDC\\u7A0B\\u5F00\\u53D1\\u670D\\u52A1\\u5DF2\\u542F\\u52A8\\uFF0C\\u5E76\\u8FD4\\u56DE JS \\u800C\\u975E HTML\\u3002`),g.push("2. \\u6838\\u5BF9 federation({ remotes }) \\u4E2D\\u7684\\u5730\\u5740\\uFF1B\\u5F00\\u53D1\\u548C\\u751F\\u4EA7\\u5730\\u5740\\u53EF\\u4EE5\\u4E0D\\u540C\\u3002"),g.push("3. \\u82E5\\u8DE8\\u57DF\\uFF0C\\u68C0\\u67E5\\u8FDC\\u7A0B\\u5F00\\u53D1\\u670D\\u52A1\\u7684 server.cors \\u914D\\u7F6E\\u3002")):(g.push(`1. \\u5728\\u6D4F\\u89C8\\u5668\\u6253\\u5F00 ${m}\\uFF0C\\u786E\\u8BA4\\u8FDC\\u7A0B\\u5E94\\u7528\\u5DF2\\u90E8\\u7F72\\uFF0C\\u4E14\\u5165\\u53E3\\u8FD4\\u56DE JS\\u3002`),g.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(R.REMOTE_LOAD_FAILED,`\\u73B0\\u8C61\\uFF1A\\u65E0\\u6CD5\\u4ECE ${m} \\u52A0\\u8F7D\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}"\\u3002\n\\u539F\\u56E0\\uFF1A${String(d?.message??d)}\n\\u4FEE\\u6CD5\\uFF1A\n${g.join(`\n`)}`,{remote:e.name})}V(l,e);let E=A.get(l);if(E&&E!==n)throw new S(R.CONTAINER_REINIT_CONFLICT,`\\u8FDC\\u7A0B\\u5BB9\\u5668 "${e.name}" \\u5DF2\\u4F7F\\u7528\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${E}" \\u521D\\u59CB\\u5316\\uFF0C\\u4E0D\\u80FD\\u518D\\u4EE5 "${n}" \\u521D\\u59CB\\u5316\\u3002\\u8BF7\\u7EDF\\u4E00 shareScope \\u914D\\u7F6E\\u3002`);return typeof l.init=="function"&&await l.init(a),A.set(l,n),e.container=l,e.state="loaded",e.debug.status="loaded",s.fails=0,l})();e.containerPromise=o;try{return await o}catch(t){if(e.containerPromise=void 0,e.state="failed",e.debug.status="failed",e.debug.error=String(t?.message??t),s.fails+=1,s.fails>=e.breakerThreshold&&(s.openUntil=Date.now()+e.breakerResetMs,s.fails=0),t instanceof S)throw v({remote:e.name,error:t}),t;if(t?.code)throw v({remote:e.name,error:t}),t;let l=new S(R.REMOTE_LOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u52A0\\u8F7D\\u5931\\u8D25\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(t?.message??t)}\\u3002\\u8BF7\\u68C0\\u67E5\\u8FDC\\u7A0B\\u5165\\u53E3\\u3001\\u7F51\\u7EDC\\u53CA\\u5171\\u4EAB\\u4F9D\\u8D56\\u3002`,{remote:e.name});throw v({remote:e.name,error:l}),l}}function D(e){let r=e.indexOf("/");return r===-1?{remote:e,module:""}:{remote:e.slice(0,r),module:Z(e.slice(r+1))}}function Z(e){return e?e.startsWith(".")?e:`./${e}`:""}async function ye(e,r){let{remote:n,module:s}=D(e);if(s&&F===n)throw new S(R.SETUP_RECURSION,`\\u73B0\\u8C61\\uFF1A\\u52A0\\u8F7D "${e}" \\u65F6\\uFF0C\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\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:n});try{O.beforeLoadRemote?.({remote:n,module:s})}catch(f){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",f)}let o=c.get(n);if(!o)throw new S(R.REMOTE_UNKNOWN,`\\u672A\\u77E5\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}"\\u3002\\u8BF7\\u5728 federation({ remotes }) \\u4E2D\\u914D\\u7F6E\\uFF0C\\u6216\\u5728\\u52A0\\u8F7D\\u524D\\u8C03\\u7528 registerRemote()\\u3002`,{remote:n});let t;try{let f=s&&o.manifestUrl?K(e):Promise.resolve();[t]=await Promise.all([Y(o,{retries:r?.retries}),f])}catch(f){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`,f),v({remote:n,error:f}),await r.fallbackModule();throw f}if(!s)return t;await ie(o,t);let l=`${n}@${o.shareScope||"default"}#${s}`;w.has(l)||w.set(l,t.get(s).catch(f=>{throw w.delete(l),f instanceof S||f?.code?f:new S(R.REMOTE_LOAD_FAILED,`\\u65E0\\u6CD5\\u4ECE\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\u52A0\\u8F7D\\u6A21\\u5757 "${s}"\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(f?.message??f)}\\u3002\\u8BF7\\u6838\\u5BF9 exposes \\u952E\\u548C\\u8FDC\\u7A0B\\u6784\\u5EFA\\u4EA7\\u7269\\u3002`,{remote:n,module:s})}));let d;try{d=await w.get(l)}catch(f){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`,f),v({remote:n,error:f}),await r.fallbackModule();throw f}try{O.afterLoadRemote?.({remote:n,module:s,module_ns:d})}catch(f){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",f)}if(d&&typeof d=="object"&&Object.keys(d).length===0){let f=new S(R.EMPTY_EXPORTS,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\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:n,module:s});v({remote:n,error:f}),console.error(f.message)}return d}function Se(e){let r=c.get(e);if(!r)throw new S(R.REMOTE_UNKNOWN,`\\u672A\\u77E5\\u8FDC\\u7A0B\\u5E94\\u7528 "${e}"\\u3002\\u8BF7\\u5148\\u6CE8\\u518C\\u8BE5\\u8FDC\\u7A0B\\u5E94\\u7528\\u3002`,{remote:e});return Y(r)}async function K(e,r={}){let{remote:n,module:s}=D(e),o=c.get(n);if(!o)throw new S(R.REMOTE_UNKNOWN,`\\u672A\\u77E5\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}"\\u3002\\u8BF7\\u5148\\u6CE8\\u518C\\u8BE5\\u8FDC\\u7A0B\\u5E94\\u7528\\u3002`,{remote:n});let t=r.mode??"preload",l=(p,E)=>{if(p.sheet)return Promise.resolve();let m=I.get(p);if(m)return m;let g=new Promise(M=>{let $=()=>{p.removeEventListener("load",$),p.removeEventListener("error",L),M()},L=()=>{v({remote:n,error:new S(R.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\u7684\\u6837\\u5F0F\\u8D44\\u6E90\\u52A0\\u8F7D\\u5931\\u8D25\\uFF1A${E}\\u3002\\u8BF7\\u68C0\\u67E5\\u6587\\u4EF6\\u662F\\u5426\\u5B58\\u5728\\u4EE5\\u53CA\\u8DE8\\u57DF\\u548C\\u7F13\\u5B58\\u914D\\u7F6E\\u3002`,{remote:n})}),$()};p.addEventListener("load",$,{once:!0}),p.addEventListener("error",L,{once:!0}),p.sheet&&$()});return I.set(p,g),g},d=(p,E)=>{if(typeof document>"u")return Promise.resolve();let m=document.querySelector(`link[href="${p}"]`);if(m)return E==="style"&&t==="preload"?I.get(m)??Promise.resolve():Promise.resolve();let g=document.createElement("link");g.rel=E==="style"?"stylesheet":"modulepreload",g.href=p,t==="prefetch"&&(g.fetchPriority="low");let M=E==="style"?l(g,p):Promise.resolve();return document.head.appendChild(g),E==="style"&&t==="preload"?M:Promise.resolve()},f=p=>{let E=typeof document<"u"?document.baseURI:void 0,m=new URL(o.entry,E||"http://fulgurjs.invalid/");return!m.pathname.endsWith("/")&&!m.pathname.split("/").pop().includes(".")&&(m.pathname+="/"),new URL(p,m).href};try{if(o.manifestUrl){let p=P.get(o.manifestUrl);p||(p=fetch(o.manifestUrl,{cache:"no-cache",signal:AbortSignal.timeout(8e3)}).then(m=>m.ok?m.json():void 0),P.set(o.manifestUrl,p),p.then(m=>{m||P.delete(o.manifestUrl)},()=>P.delete(o.manifestUrl)));let E=await p;if(E){let m=E.schemaVersion;if(typeof m=="number"&&(!Number.isInteger(m)||m>1)){v({remote:n,error:new S(R.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\u7684 manifest \\u534F\\u8BAE\\u7248\\u672C\\u4E3A ${String(m)}\\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:n})}),await d(o.entry,"modulepreload");return}await d(o.entry,"modulepreload");let g=E.exposes,M=Array.isArray(g)?g.filter(_=>_&&typeof _=="object").map(_=>[String(_.name??""),_]):g&&typeof g=="object"?Object.entries(g):[],$=s?M.filter(([_,j])=>Z(String(j?.name??_))===s):M,L=[];for(let[,_]of $)if(typeof _?.file=="string"&&await d(f(_.file),"modulepreload"),Array.isArray(_?.css))for(let j of _.css){if(typeof j!="string")continue;let Ee=d(f(j),"style");t==="preload"&&L.push(Ee)}await Promise.all(L);return}}await d(o.entry,"modulepreload")}catch(p){v({remote:n,error:new S(R.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\u9884\\u52A0\\u8F7D\\u5931\\u8D25\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(p?.message??p)}\\u3002\\u8BF7\\u68C0\\u67E5 manifest \\u548C\\u8D44\\u6E90\\u5730\\u5740\\u3002`,{remote:n})})}}return typeof window>"u"||(window.__FULGURJS_SCOPE__=a,window.__FULGURJS_INFO__={get remotes(){let e={};for(let[r,n]of c)e[r]={...n.debug,entry:n.entry};return e},errors:[]}),{shareScopeMap:a,initSharing:ce,registerShare:J,registerRemotes:X,registerRemote:le,registerPlugins:fe,loadShare:me,getLoadedShare:pe,pinLoadedShare:ge,loadRemote:ye,getContainer:Se,preloadRemote:K,parseSpec:D,clearSessionState:ae}}var re=globalThis,b=re.__FULGURJS_RUNTIME__??Ue();re.__FULGURJS_RUNTIME__=b;try{Object.freeze(b)}catch{}var He=Q;function qe(){return b}var Je=b.initSharing,Xe=b.registerShare,Be=b.registerRemotes,We=b.registerRemote,ze=b.registerPlugins,Ye=b.loadShare,Ze=b.getLoadedShare,Qe=b.pinLoadedShare,er=b.loadRemote,rr=b.getContainer,nr=b.preloadRemote,tr=b.parseSpec,or=b.clearSessionState,sr=b.shareScopeMap;function ir(a){if(a&&typeof a=="object"&&"default"in a){let c=a.default;return c!==void 0?c:a}return a}var ar=b;export{or as clearSessionState,ar as default,rr as getContainer,Ze as getLoadedShare,qe as getRuntime,Je as initSharing,er as loadRemote,Ye as loadShare,tr as parseSpec,Qe as pinLoadedShare,nr as preloadRemote,ze as registerPlugins,We as registerRemote,Be as registerRemotes,Xe as registerShare,b as runtime,sr as shareScopeMap,ir as unwrapDefault,He as version};\n';
|
|
2185
2200
|
|
|
2186
2201
|
// src/index.ts
|
|
2187
2202
|
function readRuntimeCode() {
|
|
@@ -2225,7 +2240,8 @@ function injectInitScript(html, scriptSrc) {
|
|
|
2225
2240
|
var RUNTIME_CHUNK_NAME = "fulgurjs-runtime";
|
|
2226
2241
|
var REMOTE_FACADE_CHUNK_NAME = "fulgurjs-remote-facades";
|
|
2227
2242
|
function facadeChunkOf(id) {
|
|
2228
|
-
|
|
2243
|
+
if (id.includes("preload-helper")) return "fulgurjs-preload-helper";
|
|
2244
|
+
const bare = id.replace(/^\0/, "").split("?")[0];
|
|
2229
2245
|
if (bare === "virtual:fulgurjs-runtime" || bare === "virtual:fulgurjs-runtime-proxy") {
|
|
2230
2246
|
return RUNTIME_CHUNK_NAME;
|
|
2231
2247
|
}
|
|
@@ -2235,20 +2251,36 @@ function facadeChunkOf(id) {
|
|
|
2235
2251
|
const remoteName = body.slice("__remote__/".length).split("/")[0] || "unknown";
|
|
2236
2252
|
return REMOTE_FACADE_CHUNK_NAME + "-" + remoteName.replace(/[^A-Za-z0-9_-]/g, "_");
|
|
2237
2253
|
}
|
|
2254
|
+
const keyName = (key) => key.replace(/[^A-Za-z0-9_-]/g, "_") || "unknown";
|
|
2238
2255
|
const shareKey = body.split("?")[0];
|
|
2239
|
-
return "fulgurjs-shared-" + (shareKey
|
|
2256
|
+
if (id.includes("?f=")) return "fulgurjs-shared-" + keyName(shareKey);
|
|
2257
|
+
return "fulgurjs-provider-" + keyName(shareKey);
|
|
2240
2258
|
}
|
|
2241
2259
|
if (bare.startsWith("virtual:fulgurjs-shared-ns:") || bare.startsWith("virtual:fulgurjs-cjs-ns:")) {
|
|
2242
2260
|
const prefix = bare.startsWith("virtual:fulgurjs-shared-ns:") ? "virtual:fulgurjs-shared-ns:" : "virtual:fulgurjs-cjs-ns:";
|
|
2243
2261
|
const shareKey = bare.slice(prefix.length);
|
|
2244
|
-
|
|
2262
|
+
const keyName = shareKey.replace(/[^A-Za-z0-9_-]/g, "_") || "unknown";
|
|
2263
|
+
if (bare.startsWith("virtual:fulgurjs-cjs-ns:")) return "fulgurjs-provider-" + keyName;
|
|
2264
|
+
return "fulgurjs-shared-" + keyName;
|
|
2245
2265
|
}
|
|
2246
2266
|
return null;
|
|
2247
2267
|
}
|
|
2268
|
+
function isOwnPackageModule(id) {
|
|
2269
|
+
return id.includes("/node_modules/@fulgurjs/federation/");
|
|
2270
|
+
}
|
|
2271
|
+
function providerChunkOf(id, roots) {
|
|
2272
|
+
if (roots.length === 0) return void 0;
|
|
2273
|
+
const clean = id.replace(/^\0/, "").split("?")[0];
|
|
2274
|
+
const provider = roots.find((p) => clean.startsWith(p.root));
|
|
2275
|
+
if (!provider) return void 0;
|
|
2276
|
+
return "fulgurjs-provider-" + (provider.shareKey.replace(/[^A-Za-z0-9_-]/g, "_") || "unknown");
|
|
2277
|
+
}
|
|
2248
2278
|
function federation(options) {
|
|
2249
2279
|
let remoteSchemaPromise = null;
|
|
2250
2280
|
const state = {
|
|
2251
2281
|
command: "serve",
|
|
2282
|
+
rolldownBuild: false,
|
|
2283
|
+
providerRoots: [],
|
|
2252
2284
|
base: "/",
|
|
2253
2285
|
exposeAbsPaths: {},
|
|
2254
2286
|
exposeFiles: {},
|
|
@@ -2272,6 +2304,7 @@ function federation(options) {
|
|
|
2272
2304
|
const root = path6.resolve(userConfig.root ?? process.cwd());
|
|
2273
2305
|
const normalized = normalizeOptions(options, root, env.command);
|
|
2274
2306
|
state.normalized = normalized;
|
|
2307
|
+
state.rolldownBuild = env.command === "build" && Number((readInstalledVersion(root, "vite") ?? "0").split(".")[0]) >= 8;
|
|
2275
2308
|
const extra = {};
|
|
2276
2309
|
if (env.command === "serve" && normalized.exposes.length > 0 && normalized.devSharedSelf) {
|
|
2277
2310
|
const aliasToShare = /* @__PURE__ */ new Map();
|
|
@@ -2399,6 +2432,7 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2399
2432
|
const wrapped = (id, meta) => {
|
|
2400
2433
|
const facade = facadeChunkOf(id);
|
|
2401
2434
|
if (facade) return facade;
|
|
2435
|
+
if (isOwnPackageModule(id)) return void 0;
|
|
2402
2436
|
return userFn(id, meta);
|
|
2403
2437
|
};
|
|
2404
2438
|
const extraBuild = extra.build ??= {};
|
|
@@ -2410,6 +2444,7 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2410
2444
|
const wrapped = (id) => {
|
|
2411
2445
|
const facade = facadeChunkOf(id);
|
|
2412
2446
|
if (facade) return facade;
|
|
2447
|
+
if (isOwnPackageModule(id)) return void 0;
|
|
2413
2448
|
return state.manualChunkGroups.get(id.split("?")[0]) ?? state.manualChunkGroups.get(id);
|
|
2414
2449
|
};
|
|
2415
2450
|
const extraBuild = extra.build ??= {};
|
|
@@ -2423,7 +2458,8 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2423
2458
|
const wrap = (userFn) => (id, meta) => {
|
|
2424
2459
|
const facade = facadeChunkOf(id);
|
|
2425
2460
|
if (facade) return facade;
|
|
2426
|
-
|
|
2461
|
+
if (isOwnPackageModule(id)) return void 0;
|
|
2462
|
+
return providerChunkOf(id, state.providerRoots) ?? userFn?.(id, meta);
|
|
2427
2463
|
};
|
|
2428
2464
|
const extraBuild = extra.build ??= {};
|
|
2429
2465
|
if (Array.isArray(userOutput)) {
|
|
@@ -2458,6 +2494,7 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2458
2494
|
manualChunks: (id, meta) => {
|
|
2459
2495
|
const facade = facadeChunkOf(id);
|
|
2460
2496
|
if (facade) return facade;
|
|
2497
|
+
if (isOwnPackageModule(id)) return void 0;
|
|
2461
2498
|
return groupOf(id);
|
|
2462
2499
|
}
|
|
2463
2500
|
}
|
|
@@ -2470,7 +2507,7 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2470
2507
|
}
|
|
2471
2508
|
if (normalized.exposes.length > 0) {
|
|
2472
2509
|
const userOutput3 = userConfig.build?.rollupOptions?.output;
|
|
2473
|
-
const reactDomChunkOf = (id) => /[\\/]node_modules[\\/]react-dom[\\/]/.test(id.split("?")[0]) ? "fulgurjs-
|
|
2510
|
+
const reactDomChunkOf = (id) => /[\\/]node_modules[\\/]react-dom[\\/]/.test(id.split("?")[0]) ? "fulgurjs-provider-react-dom" : void 0;
|
|
2474
2511
|
if (Array.isArray(userOutput3)) {
|
|
2475
2512
|
console.warn(
|
|
2476
2513
|
formatFulgurjsDiagnostic({
|
|
@@ -2487,10 +2524,13 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2487
2524
|
const userManualChunks3 = userOutput3?.manualChunks;
|
|
2488
2525
|
const userFn3 = typeof userManualChunks3 === "function" ? userManualChunks3 : void 0;
|
|
2489
2526
|
const combined = (id, meta) => {
|
|
2527
|
+
if (isOwnPackageModule(id)) return facadeChunkOf(id) ?? reactDomChunkOf(id) ?? void 0;
|
|
2490
2528
|
const prev = previousMc?.(id, meta);
|
|
2491
2529
|
if (prev !== void 0) return prev;
|
|
2492
2530
|
const user = userFn3?.(id, meta);
|
|
2493
2531
|
if (user !== void 0) return user;
|
|
2532
|
+
const provider = providerChunkOf(id, state.providerRoots);
|
|
2533
|
+
if (provider) return provider;
|
|
2494
2534
|
const facade = facadeChunkOf(id);
|
|
2495
2535
|
if (facade) return facade;
|
|
2496
2536
|
return reactDomChunkOf(id);
|
|
@@ -2530,6 +2570,10 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2530
2570
|
}
|
|
2531
2571
|
},
|
|
2532
2572
|
resolveId(source, importer) {
|
|
2573
|
+
if (state.normalized && importer && (importer.includes("virtual:fulgurjs-shared:") || importer.includes("virtual:fulgurjs-shared-ns:")) && /^\.\.?\//.test(source) && !source.startsWith("virtual:fulgurjs-")) {
|
|
2574
|
+
const resolved = path6.resolve(state.normalized.root, source);
|
|
2575
|
+
return resolved + (source.match(/\?[^/]*$/)?.[0] ?? "");
|
|
2576
|
+
}
|
|
2533
2577
|
let s = source;
|
|
2534
2578
|
if (s.startsWith("/@id/")) s = s.slice(5);
|
|
2535
2579
|
if (s.startsWith("__x00__")) s = "\0" + s.slice(7);
|
|
@@ -2649,7 +2693,7 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2649
2693
|
const item2 = state.normalized.shared.find((x) => x.shareKey === body);
|
|
2650
2694
|
if (item2 && item2.import !== false) {
|
|
2651
2695
|
const names = /^(\.|\/)/.test(item2.import) ? [] : enumerateCjsExports(item2.import, state.normalized.root);
|
|
2652
|
-
return genSharedFacade(item2.import, names, state.facadeDynamic);
|
|
2696
|
+
return genSharedFacade(item2.import, names, state.facadeDynamic && !state.rolldownBuild);
|
|
2653
2697
|
}
|
|
2654
2698
|
return null;
|
|
2655
2699
|
}
|
|
@@ -2666,6 +2710,7 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2666
2710
|
...item.requiredVersion !== false ? ["requiredVersion: " + JSON.stringify(item.requiredVersion)] : [],
|
|
2667
2711
|
...item.singleton ? ["singleton: true"] : [],
|
|
2668
2712
|
...item.strictVersion ? ["strictVersion: true"] : [],
|
|
2713
|
+
"localVersion: " + JSON.stringify(item.version),
|
|
2669
2714
|
"fallback: () => import(" + JSON.stringify(item.import) + ")"
|
|
2670
2715
|
];
|
|
2671
2716
|
const call = "__fulgurjs_loadShare(" + JSON.stringify(item.shareKey) + ", { " + opts.join(", ") + " })";
|
|
@@ -2734,6 +2779,21 @@ ${code}`, map: null };
|
|
|
2734
2779
|
async buildStart() {
|
|
2735
2780
|
if (state.command !== "build" || !state.normalized) return;
|
|
2736
2781
|
const n = state.normalized;
|
|
2782
|
+
state.providerRoots = [];
|
|
2783
|
+
{
|
|
2784
|
+
for (const item of n.shared) {
|
|
2785
|
+
if (item.import === false) continue;
|
|
2786
|
+
const resolved = await this.resolve(item.import, path6.join(n.root, "index.html"));
|
|
2787
|
+
const file = resolved?.id.replace(/^\0/, "").split("?")[0];
|
|
2788
|
+
if (!file) continue;
|
|
2789
|
+
const marker = "/node_modules/";
|
|
2790
|
+
const pos = file.lastIndexOf(marker);
|
|
2791
|
+
if (pos === -1) continue;
|
|
2792
|
+
const parts = file.slice(pos + marker.length).split("/");
|
|
2793
|
+
const pkg = parts[0].startsWith("@") ? parts.slice(0, 2).join("/") : parts[0];
|
|
2794
|
+
state.providerRoots.push({ root: file.slice(0, pos + marker.length) + pkg + "/", shareKey: item.shareKey });
|
|
2795
|
+
}
|
|
2796
|
+
}
|
|
2737
2797
|
if (state.manualChunkSpecsPending) {
|
|
2738
2798
|
for (const [group, specifier] of state.manualChunkSpecsPending) {
|
|
2739
2799
|
try {
|
|
@@ -2820,6 +2880,67 @@ ${code}`, map: null };
|
|
|
2820
2880
|
});
|
|
2821
2881
|
}
|
|
2822
2882
|
},
|
|
2883
|
+
outputOptions(output) {
|
|
2884
|
+
if (!state.rolldownBuild) return null;
|
|
2885
|
+
const protectedChunk = (id) => {
|
|
2886
|
+
if (id.includes("preload-helper")) return "fulgurjs-preload-helper";
|
|
2887
|
+
if (isOwnPackageModule(id)) return "fulgurjs-internal";
|
|
2888
|
+
const clean = id.replace(/^\0/, "").split("?")[0];
|
|
2889
|
+
const keyName = (key) => key.replace(/[^A-Za-z0-9_-]/g, "_") || "unknown";
|
|
2890
|
+
if (clean.startsWith(SHARED_FACADE_PREFIX) && !id.includes("?f=")) {
|
|
2891
|
+
return "fulgurjs-provider-" + keyName(clean.slice(SHARED_FACADE_PREFIX.length));
|
|
2892
|
+
}
|
|
2893
|
+
if (clean.startsWith("virtual:fulgurjs-cjs-ns:")) {
|
|
2894
|
+
return "fulgurjs-cjs-" + keyName(clean.slice("virtual:fulgurjs-cjs-ns:".length));
|
|
2895
|
+
}
|
|
2896
|
+
const provider = state.providerRoots.find((p) => clean.startsWith(p.root));
|
|
2897
|
+
if (provider) return "fulgurjs-provider-" + keyName(provider.shareKey);
|
|
2898
|
+
return facadeChunkOf(id) ?? void 0;
|
|
2899
|
+
};
|
|
2900
|
+
const native = output;
|
|
2901
|
+
if (native.codeSplitting === false || output.inlineDynamicImports || output.preserveModules) {
|
|
2902
|
+
this.error("[fulgurjs] Vite 8 \u8054\u90A6\u6784\u5EFA\u9700\u8981\u72EC\u7ACB\u7684\u5171\u4EAB\u63D0\u4F9B\u6A21\u5757\u4E0E\u534F\u5546\u6A21\u5757\u3002\u8BF7\u79FB\u9664 codeSplitting: false\u3001inlineDynamicImports: true \u6216 preserveModules: true \u540E\u91CD\u5EFA\u3002");
|
|
2903
|
+
}
|
|
2904
|
+
const splitting = typeof native.codeSplitting === "object" ? native.codeSplitting : native.advancedChunks ?? {};
|
|
2905
|
+
const groups = splitting.groups ?? [];
|
|
2906
|
+
const userGroups = [...groups];
|
|
2907
|
+
if (output.manualChunks && !splitting.groups) {
|
|
2908
|
+
const manual = output.manualChunks;
|
|
2909
|
+
if (typeof manual === "function") {
|
|
2910
|
+
userGroups.push({
|
|
2911
|
+
name: (id, ctx) => protectedChunk(id) || isOwnPackageModule(id) ? null : manual(id, { getModuleInfo: ctx.getModuleInfo }) ?? null
|
|
2912
|
+
});
|
|
2913
|
+
} else {
|
|
2914
|
+
for (const [name, specs] of Object.entries(manual)) {
|
|
2915
|
+
userGroups.push({
|
|
2916
|
+
name,
|
|
2917
|
+
test: (id) => !protectedChunk(id) && !isOwnPackageModule(id) && specs.some(
|
|
2918
|
+
(spec) => id.includes("/node_modules/" + spec + "/") || id === spec
|
|
2919
|
+
)
|
|
2920
|
+
});
|
|
2921
|
+
}
|
|
2922
|
+
}
|
|
2923
|
+
}
|
|
2924
|
+
const priority = Math.max(0, ...groups.map((g) => g.priority ?? 0)) + 1;
|
|
2925
|
+
return {
|
|
2926
|
+
...output,
|
|
2927
|
+
manualChunks: void 0,
|
|
2928
|
+
advancedChunks: void 0,
|
|
2929
|
+
strictExecutionOrder: true,
|
|
2930
|
+
codeSplitting: {
|
|
2931
|
+
...splitting,
|
|
2932
|
+
groups: [{
|
|
2933
|
+
name: (id) => protectedChunk(id),
|
|
2934
|
+
test: (id) => protectedChunk(id) !== void 0,
|
|
2935
|
+
priority,
|
|
2936
|
+
minSize: 0,
|
|
2937
|
+
minShareCount: 1,
|
|
2938
|
+
maxSize: Infinity,
|
|
2939
|
+
includeDependenciesRecursively: false
|
|
2940
|
+
}, ...userGroups]
|
|
2941
|
+
}
|
|
2942
|
+
};
|
|
2943
|
+
},
|
|
2823
2944
|
generateBundle: {
|
|
2824
2945
|
order: "post",
|
|
2825
2946
|
handler(_opts, bundle) {
|
package/dist/react.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ interface ShareEntry {
|
|
|
16
16
|
loaded?: boolean;
|
|
17
17
|
/** 首次 loadShare 成功后缓存的实例值;getLoadedShare 同步查询与 CJS 垫片依赖它 */
|
|
18
18
|
value?: any;
|
|
19
|
+
/** 进行中的 get():并发 loadShare 共享同一次加载,落定后清除(失败后允许重新加载) */
|
|
20
|
+
pendingGet?: Promise<any>;
|
|
19
21
|
}
|
|
20
22
|
type ShareScope = Record<string, Record<string, ShareEntry>>;
|
|
21
23
|
type ShareScopeMap = Record<string, ShareScope>;
|
|
@@ -62,6 +64,8 @@ interface LoadShareOptions {
|
|
|
62
64
|
shareScope?: string;
|
|
63
65
|
/** 本地副本兜底(webpack shared.import) */
|
|
64
66
|
fallback?: () => Promise<any>;
|
|
67
|
+
/** 内部:本地副本的版本号(fallback 回写共享作用域与 CJS 垫片 pin 使用;不参与快照键) */
|
|
68
|
+
localVersion?: string;
|
|
65
69
|
}
|
|
66
70
|
interface RuntimePlugin {
|
|
67
71
|
name?: string;
|
|
@@ -126,6 +130,7 @@ declare function createRuntime(): {
|
|
|
126
130
|
registerPlugins: (list: RuntimePlugin[]) => void;
|
|
127
131
|
loadShare: (name: string, opts?: LoadShareOptions) => Promise<any>;
|
|
128
132
|
getLoadedShare: (name: string, opts?: LoadShareOptions) => any;
|
|
133
|
+
pinLoadedShare: (name: string, opts: LoadShareOptions, localVersion: string, instance: unknown) => void;
|
|
129
134
|
loadRemote: <T = Record<string, any>>(spec: string, opts?: LoadRemoteOptions) => Promise<T>;
|
|
130
135
|
getContainer: (name: string) => Promise<any>;
|
|
131
136
|
preloadRemote: (spec: string, opts?: PreloadRemoteOptions) => Promise<void>;
|
|
@@ -431,12 +436,48 @@ declare function getAppContext(): AppContext;
|
|
|
431
436
|
*/
|
|
432
437
|
declare function requireAppContext(...keys: string[]): AppContext;
|
|
433
438
|
|
|
439
|
+
/** 统一逻辑位置:pathname 以 / 开头;search 空串或 ? 开头;hash 空串或 # 开头 */
|
|
440
|
+
interface BridgeLocation {
|
|
441
|
+
pathname: string;
|
|
442
|
+
search: string;
|
|
443
|
+
hash: string;
|
|
444
|
+
}
|
|
445
|
+
type BridgeNavigationResult = {
|
|
446
|
+
status: 'committed';
|
|
447
|
+
location: BridgeLocation;
|
|
448
|
+
} | {
|
|
449
|
+
status: 'cancelled';
|
|
450
|
+
location: BridgeLocation;
|
|
451
|
+
};
|
|
452
|
+
/** 子应用路由通道(桥接宿主按挂载代次创建,随 mount 第三参数交给子应用) */
|
|
453
|
+
interface BridgeChildRoute {
|
|
454
|
+
getLocation(): BridgeLocation;
|
|
455
|
+
subscribe(listener: (location: BridgeLocation) => void): () => void;
|
|
456
|
+
navigate(target: BridgeLocation, action: 'push' | 'replace'): Promise<BridgeNavigationResult>;
|
|
457
|
+
go(delta: number): void;
|
|
458
|
+
}
|
|
459
|
+
/** 挂载控制参数(mount 第三参数;不混入业务 props) */
|
|
460
|
+
interface BridgeMountOptions {
|
|
461
|
+
signal?: AbortSignal;
|
|
462
|
+
routing?: BridgeChildRoute;
|
|
463
|
+
}
|
|
464
|
+
/** 子应用路由协议声明(defineBridgeApp(工厂, { routing: true }) 时写入) */
|
|
465
|
+
interface BridgeRoutingProtocol {
|
|
466
|
+
protocol: 1;
|
|
467
|
+
}
|
|
468
|
+
|
|
434
469
|
/** 子应用桥接契约(远程 ./bridge 模块的默认导出;任务书 §3.2) */
|
|
435
470
|
interface BridgeApp {
|
|
436
471
|
/** 首次根提交完成时才算挂载成功;同一容器未卸载前重复 mount 是契约违例 */
|
|
437
|
-
mount(el: HTMLElement, props?: Record<string, unknown
|
|
472
|
+
mount(el: HTMLElement, props?: Record<string, unknown>, options?: BridgeMountOptions): void | Promise<void>;
|
|
438
473
|
/** 同步使当前挂载代次失效并清理已创建的 root;未知容器为 no-op */
|
|
439
474
|
unmount(el: HTMLElement): void;
|
|
475
|
+
/**
|
|
476
|
+
* 路由协议声明(URL 同步):defineBridgeApp(工厂, { routing: true }) 时写入
|
|
477
|
+
* { protocol: 1 }。宿主启用 routing 时必须存在且 protocol === 1(MFU-031),
|
|
478
|
+
* 不允许静默退回 memory 假装深链成功。
|
|
479
|
+
*/
|
|
480
|
+
routing?: BridgeRoutingProtocol;
|
|
440
481
|
}
|
|
441
482
|
|
|
442
483
|
/**
|
|
@@ -458,8 +499,19 @@ interface BridgeApp {
|
|
|
458
499
|
* 本文件零 Vue:/react 导入图隔离由 tests/runtime-entry-graph.test.ts 守护。
|
|
459
500
|
*/
|
|
460
501
|
|
|
461
|
-
/**
|
|
462
|
-
|
|
502
|
+
/** 工厂第二参数:挂载生命周期与路由通道(URL 同步;不混入业务 props) */
|
|
503
|
+
interface ReactBridgeAppContext {
|
|
504
|
+
/** 会话代次信号(登出/换代即 aborted;异步写回前必须检查) */
|
|
505
|
+
signal?: AbortSignal;
|
|
506
|
+
/** 路由通道(宿主启用 URL 同步时存在);配 createReactBridgeRouter 使用 */
|
|
507
|
+
routing?: BridgeChildRoute;
|
|
508
|
+
}
|
|
509
|
+
/** React 子应用工厂:接收挂载时 props 快照与生命周期上下文,返回 ReactElement */
|
|
510
|
+
type ReactBridgeAppFactory = (props: Record<string, unknown>, ctx?: ReactBridgeAppContext) => ReactElement;
|
|
511
|
+
interface DefineReactBridgeAppOptions {
|
|
512
|
+
/** 声明路由协议(URL 同步):契约写入 routing: { protocol: 1 }(缺失时宿主启用同步即 MFU-031) */
|
|
513
|
+
routing?: boolean;
|
|
514
|
+
}
|
|
463
515
|
/**
|
|
464
516
|
* 定义 React 子应用的桥接契约(远程 ./bridge 模块默认导出)。
|
|
465
517
|
*
|
|
@@ -469,7 +521,7 @@ type ReactBridgeAppFactory = (props: Record<string, unknown>) => ReactElement;
|
|
|
469
521
|
* export default defineBridgeApp((props) => <MemoryRouter><App {...props} /></MemoryRouter>)
|
|
470
522
|
* ```
|
|
471
523
|
*/
|
|
472
|
-
declare function defineBridgeApp$1(factory: ReactBridgeAppFactory): BridgeApp;
|
|
524
|
+
declare function defineBridgeApp$1(factory: ReactBridgeAppFactory, options?: DefineReactBridgeAppOptions): BridgeApp;
|
|
473
525
|
|
|
474
526
|
declare const remoteComponent: <P = Record<string, unknown>>(spec: string, opts?: ReactRemoteComponentOptions) => react.ComponentType<P & {
|
|
475
527
|
ref?: react.Ref<unknown>;
|