@fulgurjs/federation 5.3.3 → 5.4.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.
Files changed (59) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/DESIGN.md +4 -0
  3. package/README.en.md +25 -3
  4. package/README.md +88 -1
  5. package/dist/bridge-app-react.cjs +14 -4
  6. package/dist/bridge-app-react.d.cts +16 -4
  7. package/dist/bridge-app-react.d.ts +16 -4
  8. package/dist/bridge-app-react.js +6 -4
  9. package/dist/bridge-app-vue.cjs +55 -9
  10. package/dist/bridge-app-vue.d.cts +25 -4
  11. package/dist/bridge-app-vue.d.ts +25 -4
  12. package/dist/bridge-app-vue.js +47 -9
  13. package/dist/bridge-core-ejlY9ddN.d.ts +93 -0
  14. package/dist/bridge-core.cjs +9 -1
  15. package/dist/bridge-core.d.cts +8 -1
  16. package/dist/bridge-core.d.ts +8 -1
  17. package/dist/bridge-core.js +2 -2
  18. package/dist/bridge-errors.cjs +56 -3
  19. package/dist/bridge-errors.d.cts +18 -2
  20. package/dist/bridge-errors.d.ts +18 -2
  21. package/dist/bridge-errors.js +11 -3
  22. package/dist/{bridge-host-react-C55RmGll.d.ts → bridge-host-react-Bua1TCVh.d.ts} +1 -1
  23. package/dist/bridge-host-react.cjs +333 -3
  24. package/dist/bridge-host-react.d.cts +2 -0
  25. package/dist/bridge-host-react.d.ts +2 -0
  26. package/dist/bridge-host-react.js +30 -4
  27. package/dist/{bridge-host-vue-BAxDKqGH.d.ts → bridge-host-vue-Dd1kkwDb.d.ts} +1 -1
  28. package/dist/bridge-host-vue.cjs +344 -3
  29. package/dist/bridge-host-vue.js +42 -5
  30. package/dist/bridge-react.d.ts +5 -3
  31. package/dist/bridge-router-core-BRZQYDPm.d.cts +46 -0
  32. package/dist/bridge-router-core-BRZQYDPm.d.ts +46 -0
  33. package/dist/bridge-router-react.d.ts +73 -0
  34. package/dist/bridge-router-react.js +247 -0
  35. package/dist/bridge-router-vue.d.ts +50 -0
  36. package/dist/bridge-router-vue.js +217 -0
  37. package/dist/bridge-vue.d.ts +2 -2
  38. package/dist/bridge.d.ts +6 -4
  39. package/dist/{chunk-GWJKABE7.js → chunk-43UX3UZE.js} +39 -4
  40. package/dist/chunk-7CQOVLSI.js +274 -0
  41. package/dist/{chunk-DH2QMM4Y.js → chunk-HZGQOW35.js} +51 -2
  42. package/dist/{chunk-ZTRJLCOF.js → chunk-KT3YARK5.js} +27 -3
  43. package/dist/{chunk-LE2G23E7.js → chunk-RXXBTPAY.js} +1 -1
  44. package/dist/{chunk-WD2ON7SN.js → chunk-UFWZPE36.js} +313 -12
  45. package/dist/index.cjs +30 -10
  46. package/dist/index.js +30 -10
  47. package/dist/react.d.ts +51 -4
  48. package/dist/runtime-entry.d.ts +60 -4
  49. package/dist/runtime.js +9 -9
  50. package/examples/bridge/react-host/package-lock.json +105 -104
  51. package/examples/bridge/react-remote/package-lock.json +105 -104
  52. package/examples/bridge/vue-host/package-lock.json +105 -104
  53. package/examples/bridge/vue-remote/package-lock.json +105 -104
  54. package/examples/react/host/package-lock.json +1 -1
  55. package/examples/react/remote/package-lock.json +1 -1
  56. package/examples/vue/host/package-lock.json +1 -1
  57. package/examples/vue/remote/package-lock.json +1 -1
  58. package/package.json +28 -4
  59. package/dist/bridge-core-6uLJiMVa.d.ts +0 -42
@@ -627,16 +627,7 @@ function createRuntime() {
627
627
  return selectShareEntry(name, opts, true)?.value;
628
628
  }
629
629
  function pinLoadedShare2(name, opts, localVersion, instance) {
630
- if (instance === void 0) return;
631
- let entry;
632
- try {
633
- entry = selectShareEntry(name, opts);
634
- } catch {
635
- return;
636
- }
637
- if (!entry || entry.value !== void 0 || entry.version !== localVersion) return;
638
- entry.value = instance;
639
- entry.loaded = true;
630
+ registerFallbackInstance(name, { ...opts, localVersion }, instance);
640
631
  }
641
632
  function sanitizeUrl(u) {
642
633
  try {
@@ -1138,7 +1129,15 @@ var BridgeErrorCodes = {
1138
1129
  /** 桥接准备或生命周期失败(details.phase = getContext | mount | unmount) */
1139
1130
  BRIDGE_LIFECYCLE_FAILED: "MFU-016",
1140
1131
  /** 桥接会话参数与 AppContext 不一致(受控 sessionKey 与全局会话矛盾) */
1141
- BRIDGE_SESSION_MISMATCH: "MFU-017"
1132
+ BRIDGE_SESSION_MISMATCH: "MFU-017",
1133
+ /** 路由同步配置/前缀冲突(basePath 非法、同页前缀冲突或重叠) */
1134
+ ROUTING_CONFIG_INVALID: "MFU-030",
1135
+ /** 路由协议缺失/通道失效(子应用未声明 routing 协议,或已销毁通道被再次使用) */
1136
+ ROUTING_PROTOCOL_MISSING: "MFU-031",
1137
+ /** 非法导航(目标越界前缀、非法 go 参数、失效实例的请求) */
1138
+ ROUTING_NAVIGATION_INVALID: "MFU-032",
1139
+ /** 路由准备/同步失败(重定向循环、子应用路由准备失败且已阻止错误页面显示) */
1140
+ ROUTING_SYNC_FAILED: "MFU-033"
1142
1141
  };
1143
1142
  function invalidBridgeContractError(spec, mod) {
1144
1143
  const actual = mod === null ? "null" : typeof mod;
@@ -1195,6 +1194,43 @@ function invalidSessionKeyError(spec, value) {
1195
1194
  { spec, value: String(value) }
1196
1195
  );
1197
1196
  }
1197
+ function routingConfigError(spec, reason) {
1198
+ return new FgError(
1199
+ BridgeErrorCodes.ROUTING_CONFIG_INVALID,
1200
+ `\u73B0\u8C61\uFF1A\u6865\u63A5\u5E94\u7528 "${spec}" \u7684 URL \u540C\u6B65\u914D\u7F6E\u65E0\u6CD5\u542F\u7528\u3002
1201
+ \u539F\u56E0\uFF1A${reason}
1202
+ \u4FEE\u6CD5\uFF1A\u4FEE\u6B63 routing.basePath \u4E3A\u5BBF\u4E3B\u8DEF\u7531\u89C6\u89D2\u7684\u9759\u6001\u7EDD\u5BF9\u8DEF\u5F84\uFF08\u5982 "/approval"\uFF09\uFF0C\u5E76\u4FDD\u8BC1\u540C\u9875\u5404\u540C\u6B65\u5B9E\u4F8B\u524D\u7F00\u4E92\u4E0D\u91CD\u53E0\uFF1B\u5BBF\u4E3B\u8DEF\u7531\u9700\u58F0\u660E\u5BF9\u5E94\u7684\u540E\u7F00\u5339\u914D\uFF08Vue "/approval/:pathMatch(.*)*"\u3001React "/approval/*"\uFF09\u3002`,
1203
+ { spec }
1204
+ );
1205
+ }
1206
+ function routingProtocolError(spec, reason) {
1207
+ return new FgError(
1208
+ BridgeErrorCodes.ROUTING_PROTOCOL_MISSING,
1209
+ `\u73B0\u8C61\uFF1A\u6865\u63A5\u5E94\u7528 "${spec}" \u7684 URL \u540C\u6B65\u901A\u9053\u4E0D\u53EF\u7528\u3002
1210
+ \u539F\u56E0\uFF1A${reason}
1211
+ \u4FEE\u6CD5\uFF1A\u5B50\u5E94\u7528\u4EE5 defineBridgeApp(\u5DE5\u5382, { routing: true }) \u58F0\u660E\u8DEF\u7531\u534F\u8BAE\u5E76\u5728\u5DE5\u5382\u7B2C\u4E8C\u53C2\u6570\u63A5\u6536 { signal, routing } \u63A5\u7EBF\u53D7\u63A7\u8DEF\u7531\uFF1B\u901A\u9053\u968F\u6302\u8F7D\u751F\u547D\u5468\u671F\u521B\u5EFA\uFF0C\u9500\u6BC1\u540E\u4E0D\u5F97\u590D\u7528\uFF08\u91CD\u6302\u4F1A\u5F97\u5230\u65B0\u901A\u9053\uFF09\u3002`,
1212
+ { spec }
1213
+ );
1214
+ }
1215
+ function routingNavigationError(spec, reason) {
1216
+ return new FgError(
1217
+ BridgeErrorCodes.ROUTING_NAVIGATION_INVALID,
1218
+ `\u73B0\u8C61\uFF1A\u6865\u63A5\u5E94\u7528 "${spec}" \u7684\u4E00\u6B21\u5BFC\u822A\u8BF7\u6C42\u88AB\u62D2\u7EDD\u3002
1219
+ \u539F\u56E0\uFF1A${reason}
1220
+ \u4FEE\u6CD5\uFF1A\u5B50\u5E94\u7528\u5BFC\u822A\u76EE\u6807\u5FC5\u987B\u4F4D\u4E8E\u81EA\u8EAB basePath \u524D\u7F00\u5185\uFF08\u8DE8\u524D\u7F00\u8BF7\u7528\u5BBF\u4E3B\u83DC\u5355/\u5BBF\u4E3B\u80FD\u529B\uFF09\uFF1Bgo \u53C2\u6570\u4E3A\u6709\u9650\u6574\u6570\u4E14 |delta| \u2264 50\u3002`,
1221
+ { spec }
1222
+ );
1223
+ }
1224
+ function routingSyncError(spec, reason, chain, cause) {
1225
+ return new FgError(
1226
+ BridgeErrorCodes.ROUTING_SYNC_FAILED,
1227
+ `\u73B0\u8C61\uFF1A\u6865\u63A5\u5E94\u7528 "${spec}" \u7684 URL \u540C\u6B65\u5931\u8D25\u3002
1228
+ \u539F\u56E0\uFF1A${reason}
1229
+ \u4FEE\u6CD5\uFF1A\u68C0\u67E5\u8DEF\u7531\u5B88\u536B\u3001\u52A0\u8F7D\u5668\u4E0E\u5BFC\u822A\u5F02\u5E38\uFF1B\u91CD\u5B9A\u5411\u94FE\u4E0D\u5E94\u6210\u73AF\u3002\u76EE\u6807\u94FE\uFF1A${chain.join(" \u2192 ")}\u3002`,
1230
+ { spec, chain: [...chain] },
1231
+ { cause }
1232
+ );
1233
+ }
1198
1234
 
1199
1235
  // src/bridge-core.ts
1200
1236
  function assertBridgeContract(spec, mod) {
@@ -1299,6 +1335,269 @@ function withBridgeTimeout(p, ms, spec) {
1299
1335
  });
1300
1336
  }
1301
1337
 
1338
+ // src/bridge-router-core.ts
1339
+ var MAX_REDIRECT_PER_REQUEST = 5;
1340
+ var MAX_GO_DELTA = 50;
1341
+ function normalizeBasePath(basePath, spec) {
1342
+ const bad = (reason) => routingConfigError(spec, reason);
1343
+ if (typeof basePath !== "string" || basePath === "") throw bad("basePath \u4E0D\u80FD\u4E3A\u7A7A\u3002");
1344
+ if (/^\/+$/u.test(basePath)) throw bad('basePath \u4E0D\u80FD\u662F\u6839 "/"\u2014\u2014\u6839\u8DEF\u5F84\u5C5E\u4E8E\u5BBF\u4E3B\u81EA\u8EAB\u9875\u9762\uFF0C\u8BF7\u4E3A\u540C\u6B65\u5B9E\u4F8B\u5206\u914D\u72EC\u7ACB\u524D\u7F00\u3002');
1345
+ if (!basePath.startsWith("/")) throw bad(`basePath \u5FC5\u987B\u4EE5 "/" \u5F00\u5934\uFF1A\u5F53\u524D\u4E3A "${basePath}"\u3002`);
1346
+ if (/[?#]/.test(basePath) || basePath.includes("://")) throw bad(`basePath \u4E0D\u80FD\u5305\u542B query/hash/\u534F\u8BAE\uFF1A\u5F53\u524D\u4E3A "${basePath}"\u3002`);
1347
+ if (basePath.includes("*") || basePath.includes(":")) throw bad(`basePath \u4E0D\u63A5\u53D7\u901A\u914D\u7B26\u6216\u53C2\u6570\u6A21\u677F\uFF1A\u5F53\u524D\u4E3A "${basePath}"\u3002\u8BF7\u4F7F\u7528\u9759\u6001\u7EDD\u5BF9\u8DEF\u5F84\u3002`);
1348
+ if (/\\|\/\/|%(?:2e|2f|5c)/i.test(basePath) || basePath.split("/").some((part) => part === "." || part === "..")) throw bad("basePath \u4E0D\u80FD\u5305\u542B\u7A7A\u8DEF\u5F84\u6BB5\u3001\u8F6C\u4E49\u5206\u9694\u7B26\u6216\u76F8\u5BF9\u8DEF\u5F84\u6BB5\u3002");
1349
+ return basePath.endsWith("/") ? basePath.slice(0, -1) : basePath;
1350
+ }
1351
+ function matchesBasePath(hostPathname, basePath) {
1352
+ return hostPathname === basePath || hostPathname.startsWith(basePath + "/");
1353
+ }
1354
+ function overlapsBasePath(a, b) {
1355
+ return a === b || a.startsWith(b + "/") || b.startsWith(a + "/");
1356
+ }
1357
+ function toChildLocation(host, basePath) {
1358
+ const rest = host.pathname === basePath ? "/" : host.pathname.slice(basePath.length);
1359
+ return { pathname: rest || "/", search: host.search, hash: host.hash };
1360
+ }
1361
+ function toHostLocation(child, basePath, spec) {
1362
+ const childPath = child.pathname === "/" ? "" : child.pathname;
1363
+ if (childPath !== "" && !childPath.startsWith("/")) {
1364
+ throw routingNavigationError(spec, `\u5BFC\u822A\u76EE\u6807 pathname \u5FC5\u987B\u4EE5 "/" \u5F00\u5934\uFF1A\u5F53\u524D\u4E3A "${child.pathname}"\u3002`);
1365
+ }
1366
+ return { pathname: basePath + childPath, search: child.search, hash: child.hash };
1367
+ }
1368
+ function sameLocation(a, b) {
1369
+ return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;
1370
+ }
1371
+ function assertChildTargetInScope(target, basePath, spec) {
1372
+ if (!target || typeof target.pathname !== "string" || typeof target.search !== "string" || typeof target.hash !== "string" || target.search !== "" && !target.search.startsWith("?") || target.hash !== "" && !target.hash.startsWith("#")) throw routingNavigationError(spec, "\u5BFC\u822A\u76EE\u6807\u5FC5\u987B\u63D0\u4F9B pathname\u3001search\u3001hash \u4E09\u6BB5\uFF0Csearch/hash \u5E94\u4E3A\u7A7A\u6216\u4EE5 ?/# \u5F00\u5934\u3002");
1373
+ if (/[\x00-\x20\\?#]|%(?:2e|2f|5c)/i.test(target.pathname) || target.pathname.includes("//") || target.pathname.split("/").some((part) => part === "." || part === "..")) {
1374
+ throw routingNavigationError(spec, `\u5BFC\u822A\u76EE\u6807\u8BD5\u56FE\u9003\u9038\u81EA\u8EAB\u524D\u7F00\uFF1Apathname "${target.pathname}"\u3002\u8DE8\u524D\u7F00\u5BFC\u822A\u8BF7\u901A\u8FC7\u5BBF\u4E3B\u83DC\u5355\u7B49\u5BBF\u4E3B\u80FD\u529B\u5B8C\u6210\u3002`);
1375
+ }
1376
+ const host = toHostLocation(target, basePath, spec);
1377
+ if (!matchesBasePath(host.pathname, basePath)) {
1378
+ throw routingNavigationError(spec, `\u5BFC\u822A\u76EE\u6807 ${host.pathname} \u4E0D\u5728\u524D\u7F00 ${basePath} \u4E0B\u3002`);
1379
+ }
1380
+ }
1381
+ var activeRoutingPrefixes = /* @__PURE__ */ new Map();
1382
+ function acquireRoutingPrefix(basePath, spec) {
1383
+ for (const [active] of activeRoutingPrefixes) {
1384
+ if ((activeRoutingPrefixes.get(active) ?? 0) > 0 && overlapsBasePath(active, basePath)) {
1385
+ throw routingConfigError(spec, `\u540C\u9875\u5DF2\u6709\u5360\u7528\u524D\u7F00 "${active}" \u7684\u540C\u6B65\u5B9E\u4F8B\uFF0C\u65B0\u5B9E\u4F8B "${spec}" \u7684 basePath "${basePath}" \u4E0E\u5176\u91CD\u53E0\u3002`);
1386
+ }
1387
+ }
1388
+ activeRoutingPrefixes.set(basePath, (activeRoutingPrefixes.get(basePath) ?? 0) + 1);
1389
+ let released = false;
1390
+ return () => {
1391
+ if (released) return;
1392
+ released = true;
1393
+ activeRoutingPrefixes.set(basePath, Math.max(0, (activeRoutingPrefixes.get(basePath) ?? 1) - 1));
1394
+ };
1395
+ }
1396
+ function assertBridgeRoutingProtocol(spec, contract) {
1397
+ const r = contract?.routing;
1398
+ if (!r || r.protocol !== 1) {
1399
+ throw routingProtocolError(
1400
+ spec,
1401
+ `\u8FDC\u7A0B\u5951\u7EA6\u672A\u58F0\u660E\u8DEF\u7531\u534F\u8BAE\uFF08\u671F\u671B routing: { protocol: 1 }\uFF0C\u5B9E\u9645 ${r === void 0 ? "\u7F3A\u5931" : `protocol=${String(r?.protocol)}`}\uFF09\u3002\u5F00\u542F URL \u540C\u6B65\u4E0D\u80FD\u9759\u9ED8\u9000\u56DE memory \u6A21\u5F0F\u3002`
1402
+ );
1403
+ }
1404
+ }
1405
+ var RoutingChannel = class {
1406
+ id;
1407
+ basePath;
1408
+ spec;
1409
+ host;
1410
+ listeners = /* @__PURE__ */ new Set();
1411
+ current;
1412
+ lastConfirmed;
1413
+ seq = 0;
1414
+ inflight = null;
1415
+ queue;
1416
+ generation = 0;
1417
+ disposed = false;
1418
+ active = true;
1419
+ releasePrefix;
1420
+ unsubHost;
1421
+ /** 连续内部 replace 计数(有界重定向检测) */
1422
+ redirectChain = [];
1423
+ redirectTimer;
1424
+ /** 诊断观测钩子(测试断言/诊断用) */
1425
+ onEvent;
1426
+ constructor(id, basePath, host, spec) {
1427
+ this.id = id;
1428
+ this.spec = spec;
1429
+ this.basePath = normalizeBasePath(basePath, spec);
1430
+ this.host = host;
1431
+ const initial = host.getLocation();
1432
+ this.current = matchesBasePath(initial.pathname, this.basePath) ? toChildLocation(initial, this.basePath) : { pathname: "/", search: "", hash: "" };
1433
+ this.lastConfirmed = { ...this.current };
1434
+ this.releasePrefix = acquireRoutingPrefix(this.basePath, spec);
1435
+ this.unsubHost = host.subscribe((loc) => this.handleHostLocation(loc));
1436
+ }
1437
+ emit(loc) {
1438
+ this.current = { ...loc };
1439
+ for (const l of [...this.listeners]) {
1440
+ try {
1441
+ l(this.current);
1442
+ } catch (e) {
1443
+ console.error("[fulgurjs] \u5B50\u5E94\u7528\u8DEF\u7531\u8BA2\u9605\u8005\u5F02\u5E38\uFF08\u5DF2\u9694\u79BB\uFF0C\u4E0D\u5F71\u54CD\u5BBF\u4E3B\uFF09\uFF1A", e);
1444
+ }
1445
+ }
1446
+ }
1447
+ handleHostLocation(hostLoc) {
1448
+ if (this.disposed) return;
1449
+ if (!matchesBasePath(hostLoc.pathname, this.basePath)) {
1450
+ this.cancelPending();
1451
+ this.onEvent?.({ type: "prefix-miss", pathname: hostLoc.pathname });
1452
+ return;
1453
+ }
1454
+ if (!this.active) {
1455
+ this.onEvent?.({ type: "paused-host-loc" });
1456
+ return;
1457
+ }
1458
+ const child = toChildLocation(hostLoc, this.basePath);
1459
+ if (this.inflight && sameLocation(child, this.inflight.target)) {
1460
+ const { seq } = this.inflight;
1461
+ this.lastConfirmed = child;
1462
+ this.emit(child);
1463
+ this.onEvent?.({ type: "request-confirmed", seq });
1464
+ return;
1465
+ }
1466
+ if (this.inflight) {
1467
+ const seq = this.inflight.seq;
1468
+ this.lastConfirmed = child;
1469
+ this.cancelPending();
1470
+ this.emit(child);
1471
+ this.onEvent?.({ type: "request-superseded", seq });
1472
+ return;
1473
+ }
1474
+ if (!sameLocation(child, this.lastConfirmed)) this.generation++;
1475
+ this.lastConfirmed = child;
1476
+ this.emit(child);
1477
+ this.onEvent?.({ type: "host-broadcast" });
1478
+ }
1479
+ getLocation() {
1480
+ return { ...this.current };
1481
+ }
1482
+ subscribe(listener) {
1483
+ if (this.disposed) {
1484
+ throw routingProtocolError(this.spec, `\u901A\u9053 ${this.id} \u5DF2\u9500\u6BC1\uFF0C\u4E0D\u80FD\u518D\u8BA2\u9605\uFF08\u65E7\u5B9E\u4F8B\u7684\u8FDF\u5230\u8BA2\u9605\u5FC5\u987B\u5931\u6548\uFF1B\u91CD\u6302\u4F1A\u5F97\u5230\u65B0\u901A\u9053\uFF09\u3002`);
1485
+ }
1486
+ this.listeners.add(listener);
1487
+ return () => {
1488
+ this.listeners.delete(listener);
1489
+ };
1490
+ }
1491
+ cancelPending() {
1492
+ this.generation++;
1493
+ const pending = this.inflight;
1494
+ this.inflight = null;
1495
+ if (pending) {
1496
+ pending.abort.abort();
1497
+ pending.resolve({ status: "cancelled", location: { ...this.lastConfirmed } });
1498
+ }
1499
+ }
1500
+ navigate(target, action) {
1501
+ const generation = this.generation;
1502
+ const snapshot = { ...target };
1503
+ const run = () => generation !== this.generation ? Promise.resolve({ status: "cancelled", location: { ...this.lastConfirmed } }) : this.performNavigation(snapshot, action);
1504
+ const task = this.queue ? this.queue.then(run) : run();
1505
+ const tail = task.then(() => {
1506
+ }, () => {
1507
+ });
1508
+ this.queue = tail;
1509
+ void tail.then(() => {
1510
+ if (this.queue === tail) this.queue = void 0;
1511
+ });
1512
+ return task;
1513
+ }
1514
+ async performNavigation(target, action) {
1515
+ if (this.disposed || !this.active || !matchesBasePath(this.host.getLocation().pathname, this.basePath)) {
1516
+ this.onEvent?.({ type: this.disposed ? "rejected-disposed" : "rejected-inactive" });
1517
+ return { status: "cancelled", location: { ...this.lastConfirmed } };
1518
+ }
1519
+ assertChildTargetInScope(target, this.basePath, this.spec);
1520
+ if (sameLocation(target, this.lastConfirmed)) {
1521
+ this.onEvent?.({ type: "noop" });
1522
+ return { status: "committed", location: { ...this.lastConfirmed } };
1523
+ }
1524
+ if (action === "replace") {
1525
+ this.redirectChain.push(target.pathname + target.search + target.hash);
1526
+ } else {
1527
+ this.redirectChain = [];
1528
+ }
1529
+ if (this.redirectTimer) clearTimeout(this.redirectTimer);
1530
+ this.redirectTimer = setTimeout(() => {
1531
+ this.redirectChain = [];
1532
+ }, 1e3);
1533
+ if (this.redirectChain.length > MAX_REDIRECT_PER_REQUEST) {
1534
+ const chain = [...this.redirectChain];
1535
+ this.redirectChain = [];
1536
+ throw routingSyncError(this.spec, "\u540C\u4E00\u901A\u9053\u7684\u8FDE\u7EED replace \u91CD\u5B9A\u5411\u8D85\u8FC7\u4E0A\u9650\uFF08\u7591\u4F3C\u5B50\u5E94\u7528\u8DEF\u7531\u4E92\u76F8\u6210\u73AF\uFF09\u3002", chain);
1537
+ }
1538
+ const seq = ++this.seq;
1539
+ this.onEvent?.({ type: "request-start", seq, target: { ...target }, action });
1540
+ return new Promise((resolve, reject) => {
1541
+ const abort = new AbortController();
1542
+ this.inflight = { seq, target: { ...target }, resolve, abort };
1543
+ Promise.resolve().then(() => abort.signal.aborted ? { status: "cancelled", location: this.host.getLocation() } : this.host.navigate(toHostLocation(target, this.basePath, this.spec), action, { signal: abort.signal })).then((result) => {
1544
+ if (!this.inflight || this.inflight.seq !== seq) return;
1545
+ if (this.disposed || !this.active) {
1546
+ this.inflight = null;
1547
+ resolve({ status: "cancelled", location: { ...this.lastConfirmed } });
1548
+ return;
1549
+ }
1550
+ this.inflight = null;
1551
+ if (result.status === "committed" && matchesBasePath(result.location.pathname, this.basePath)) {
1552
+ const child = toChildLocation(result.location, this.basePath);
1553
+ this.lastConfirmed = child;
1554
+ this.emit(child);
1555
+ } else {
1556
+ this.emit({ ...this.lastConfirmed });
1557
+ }
1558
+ this.onEvent?.({ type: "host-verdict", seq, status: result.status });
1559
+ resolve(
1560
+ result.status === "committed" && matchesBasePath(result.location.pathname, this.basePath) ? { status: "committed", location: { ...this.lastConfirmed } } : { status: "cancelled", location: { ...this.lastConfirmed } }
1561
+ );
1562
+ }).catch((cause) => {
1563
+ if (this.inflight?.seq === seq) {
1564
+ this.inflight = null;
1565
+ this.onEvent?.({ type: "host-error", seq });
1566
+ this.emit({ ...this.lastConfirmed });
1567
+ reject(routingSyncError(this.spec, `\u5BBF\u4E3B\u5BFC\u822A\u6267\u884C\u5931\u8D25\uFF1A${cause instanceof Error ? cause.message : String(cause)}`, [], cause));
1568
+ }
1569
+ });
1570
+ });
1571
+ }
1572
+ /** 委托宿主历史(有限整数);不创建第二条独立历史 */
1573
+ go(delta) {
1574
+ if (this.disposed || !this.active || !matchesBasePath(this.host.getLocation().pathname, this.basePath)) return;
1575
+ if (typeof delta !== "number" || !Number.isInteger(delta) || Math.abs(delta) > MAX_GO_DELTA) {
1576
+ throw routingNavigationError(this.spec, `go \u53C2\u6570\u5FC5\u987B\u662F\u6709\u9650\u6574\u6570\uFF08|delta| \u2264 ${MAX_GO_DELTA}\uFF09\uFF1A\u5F53\u524D\u4E3A ${String(delta)}\u3002`);
1577
+ }
1578
+ this.host.go(delta);
1579
+ }
1580
+ /** KeepAlive deactivate:暂停广播与写入;通道与订阅保留(activate 后 resync) */
1581
+ setActive(active) {
1582
+ if (this.disposed) return;
1583
+ if (!active) this.cancelPending();
1584
+ this.active = active;
1585
+ this.onEvent?.({ type: active ? "resumed" : "paused" });
1586
+ if (active) this.handleHostLocation(this.host.getLocation());
1587
+ }
1588
+ /** 挂载生命周期结束:清理订阅/登记/在飞请求;此后一切写入失效 */
1589
+ dispose() {
1590
+ if (this.disposed) return;
1591
+ this.disposed = true;
1592
+ if (this.redirectTimer) clearTimeout(this.redirectTimer);
1593
+ this.unsubHost();
1594
+ this.releasePrefix();
1595
+ this.cancelPending();
1596
+ this.listeners.clear();
1597
+ this.onEvent?.({ type: "disposed" });
1598
+ }
1599
+ };
1600
+
1302
1601
  export {
1303
1602
  loadRemote,
1304
1603
  provideAppContext,
@@ -1309,5 +1608,7 @@ export {
1309
1608
  resolveBridgeContext,
1310
1609
  assertControlledSessionKey,
1311
1610
  assertBridgeOptions,
1312
- withBridgeTimeout
1611
+ withBridgeTimeout,
1612
+ assertBridgeRoutingProtocol,
1613
+ RoutingChannel
1313
1614
  };
package/dist/index.cjs CHANGED
@@ -43,7 +43,7 @@ var import_node_fs = __toESM(require("fs"), 1);
43
43
  var import_node_path = __toESM(require("path"), 1);
44
44
 
45
45
  // src/version.ts
46
- var RUNTIME_VERSION = "5.3.3";
46
+ var RUNTIME_VERSION = "5.4.1";
47
47
 
48
48
  // src/dev-cors.ts
49
49
  function normalizeDevCorsOrigins(input) {
@@ -734,7 +734,7 @@ function genCjsNsFacade(item, exportNames, importTarget) {
734
734
  // 兜底保留裸包名(与命名空间门面同语义,无 proxy 载体时可解析)
735
735
  `import * as __fulgurjs_local from ${JSON.stringify(importTarget ?? item.import)};`,
736
736
  `const __fulgurjs_snap = __fulgurjs_gls(${JSON.stringify(item.shareKey)}, { ${opts.join(", ")} });`,
737
- // 未命中同步快照:把本地副本登记为将选中的共享条目(版本一致且条目未就绪时生效),
737
+ // 未命中同步快照:空作用域登记本地副本,已有条目仅在版本一致且未就绪时回填,
738
738
  // 使先于 TLA 门面求值的垫片(jsx-runtime 拖入 provider chunk 的场景)与后续协商
739
739
  // 收敛到同一份实例,杜绝单例双实例。
740
740
  `if (__fulgurjs_snap === undefined) __fulgurjs_pin(${JSON.stringify(item.shareKey)}, { ${opts.join(", ")} }, ${JSON.stringify(item.version)}, __fulgurjs_local);`,
@@ -1368,7 +1368,7 @@ async function transformModule(code, id, ctx) {
1368
1368
  for (const s2 of options.shared) candidates.push(s2.configKey.replace(/\/$/, ""));
1369
1369
  for (const r of options.remotes) candidates.push(r.key);
1370
1370
  if (!candidates.some((c) => code.includes(c))) return null;
1371
- if (ctx.cjsRequireRewrite && !inSharedClosure(clean, ctx.sharedClosureRoots) && /require\s*\(\s*["']/.test(code)) {
1371
+ if (ctx.cjsRequireRewrite && /require\s*\(\s*["']/.test(code)) {
1372
1372
  const sharedByAlias = /* @__PURE__ */ new Map();
1373
1373
  for (const s2 of options.shared) {
1374
1374
  if (s2.import === false) continue;
@@ -1376,6 +1376,7 @@ async function transformModule(code, id, ctx) {
1376
1376
  }
1377
1377
  let cjsEdited = false;
1378
1378
  for (const [alias, item] of sharedByAlias) {
1379
+ if (ctx.sharedClosureRoots?.some((root) => clean.startsWith(root.root) && root.keys.has(item.shareKey))) continue;
1379
1380
  const re = new RegExp(`require\\((["'])${alias.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\1\\)`, "g");
1380
1381
  if (!re.test(code)) continue;
1381
1382
  code = code.replace(re, `require(${JSON.stringify(`virtual:fulgurjs-cjs-ns:${item.shareKey}`)})`);
@@ -2231,7 +2232,7 @@ function syncViteCacheMarker(root, pluginVersion, log) {
2231
2232
  }
2232
2233
 
2233
2234
  // src/runtime-code.gen.ts
2234
- 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.3.3";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';
2235
+ var runtime_code_gen_default = 'var Re=/^v?(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:-((?:[0-9A-Za-z-]+)(?:\\.[0-9A-Za-z-]+)*))?(?:\\+[0-9A-Za-z.-]+)?$/;function j(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=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:we(u.pre,i.pre)}var be=/^[a-z]+[+:-]/i;function N(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!j(a)?.pre.length;let u=c.split(/\\s+-\\s+/);if(u.length===2){let y=u[0].trim(),w=u[1].trim();return!(!N(a,`>=${y}`)||!N(a,`<=${w}`))}let i=j(a);if(!i)return!1;let h=$e(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 $e(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=ve(y,w);if(P===null)return null;c.push(...P)}return c}function ve(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 ee="5.4.1";var Ie="__fulgurjsSetup",Te="__FULGURJS_APP_CONFIG__",G=15e3,re=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,U=new WeakMap,O={},te=()=>{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)}},A=new Map,C,oe=e=>{let r=A.get(e);return r||A.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});C=e;let t;try{t=r(n)}catch(l){throw o(l)}finally{C=void 0}try{await t}catch(l){throw o(l)}}async function se(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 ie(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 ae(e,r){let n=r?.[Ie];if(typeof n!="string"||n==="")return;let s=oe(e.name);s.setupPromise||(s.setupPromise=se(e,r,n,s).catch(t=>{throw s.setupPromise=void 0,t})),await s.setupPromise;let o=s.setupExports?.onSession;typeof o=="function"&&await ie(e,s,o)}function ce(){for(let e of A.values()){try{e.controller?.abort()}catch{}e.sessionKey=void 0,e.sessionPromise=void 0}}let x=e=>a[e]??=Object.create(null);function $(e){try{O.onRemoteError?.(e)}catch{}typeof window<"u"&&window.dispatchEvent(new CustomEvent("fulgurjs:error",{detail:e}))}function ue(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 le(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){le(r);let n=c.get(r.name);c.set(r.name,{timeout:G,retries:re,...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 fe(e){X([e])}function de(e){u.push(...e),h.clear(),te()}function F(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||N(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 $({remote:g.from,error:L}),L}let v=`${s}|${o}|${f??"*"}|${E}|${d.join(",")}`;i.has(v)||(i.add(v),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 $({remote:o,error:m}),m}return}return l[E]}function B(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=F(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=F(e,r);if(!t){if(r.fallback){let p=await r.fallback();return B(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 $({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:F(e,r,!0)?.value}function ge(e,r,n,s){B(e,{...r,localVersion:n},s)}function W(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 z(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 Y(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)})),z(t,r.timeout??G,`\\u52A0\\u8F7D\\u8FDC\\u7A0B\\u5165\\u53E3 ${W(e)}`)}async function Z(e,r){let n=e.shareScope||"default";if(e.container){let t=U.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 $({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 z(e.promise(),e.timeout??G,`\\u89E3\\u6790\\u52A8\\u6001\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}"`),g=typeof m=="string"?await Y(m,e):m;return V(g,e),g});else for(let m of[e.entry,...e.fallback??[]])t.push(async()=>{let g=await Y(m,e);return V(g,e),g});let l,d,f=!1,p=r?.retries??e.retries??re;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(v){if(d=v,v?.code)throw v;g<p&&await he(Math.min(je,200*2**g)*(1-Ne*(1-2*Math.random())))}}if(f)break}if(!f||!l){let m=W(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=U.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),U.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 $({remote:e.name,error:t}),t;if(t?.code)throw $({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 $({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:Q(e.slice(r+1))}}function Q(e){return e?e.startsWith(".")?e:`./${e}`:""}async function ye(e,r){let{remote:n,module:s}=D(e);if(s&&C===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([Z(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),$({remote:n,error:f}),await r.fallbackModule();throw f}if(!s)return t;await ae(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),$({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});$({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 Z(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 v=()=>{p.removeEventListener("load",v),p.removeEventListener("error",L),M()},L=()=>{$({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})}),v()};p.addEventListener("load",v,{once:!0}),p.addEventListener("error",L,{once:!0}),p.sheet&&v()});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)){$({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):[],v=s?M.filter(([_,k])=>Q(String(k?.name??_))===s):M,L=[];for(let[,_]of v)if(typeof _?.file=="string"&&await d(f(_.file),"modulepreload"),Array.isArray(_?.css))for(let k of _.css){if(typeof k!="string")continue;let Ee=d(f(k),"style");t==="preload"&&L.push(Ee)}await Promise.all(L);return}}await d(o.entry,"modulepreload")}catch(p){$({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:ue,registerShare:J,registerRemotes:X,registerRemote:fe,registerPlugins:de,loadShare:me,getLoadedShare:pe,pinLoadedShare:ge,loadRemote:ye,getContainer:Se,preloadRemote:K,parseSpec:D,clearSessionState:ce}}var ne=globalThis,b=ne.__FULGURJS_RUNTIME__??Ue();ne.__FULGURJS_RUNTIME__=b;try{Object.freeze(b)}catch{}var He=ee;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';
2235
2236
 
2236
2237
  // src/index.ts
2237
2238
  function readRuntimeCode() {
@@ -2621,7 +2622,8 @@ export { default } from ${JSON.stringify(url)};
2621
2622
  const isOurVirtual = impClean.startsWith("virtual:fulgurjs-") || impClean.startsWith("\0virtual:fulgurjs-");
2622
2623
  if (!isOurVirtual && !impClean.includes("/node_modules/.vite/") && !state.sharedClosureRoots.some((r) => impClean.startsWith(r.root)) && (state.transformedModules.has(importer) || state.transformedModules.has(impClean))) {
2623
2624
  const hit = state.normalized.shared.find((sh) => sh.aliases.includes(bareClean));
2624
- if (hit) {
2625
+ const providerSelf = hit && state.normalized.remotes.length > 0 && state.providerRoots.some((provider) => impClean.startsWith(provider.root) && provider.shareKey === hit.shareKey);
2626
+ if (hit && !providerSelf) {
2625
2627
  return RESOLVED.sharedNsFacade(hit.shareKey) + query;
2626
2628
  }
2627
2629
  }
@@ -2763,7 +2765,9 @@ export { default } from ${JSON.stringify(url)};
2763
2765
  ${code}`, map: null };
2764
2766
  }
2765
2767
  const isPureRemoteBuild = state.normalized.exposes.length > 0 && state.normalized.remotes.length === 0;
2766
- const allowNodeModules = state.normalized.devSharedSelf || isPureRemoteBuild;
2768
+ const providerCjs = state.command === "build" && /require\s*\(\s*["']/.test(code) && state.providerRoots.some((provider) => clean.startsWith(provider.root));
2769
+ const allowNodeModules = state.normalized.devSharedSelf || isPureRemoteBuild || providerCjs;
2770
+ const cjsClosureRoots = state.sharedClosureRoots.length > 0 || isPureRemoteBuild ? state.sharedClosureRoots : state.providerRoots.map((provider) => ({ root: provider.root, keys: /* @__PURE__ */ new Set([provider.shareKey]) }));
2767
2771
  if (/\.vue(\?|$)/.test(id)) {
2768
2772
  if (state.command === "build" && /type=script/.test(id)) {
2769
2773
  return transformModule(code, id, {
@@ -2772,7 +2776,7 @@ ${code}`, map: null };
2772
2776
  rewriteShared: true,
2773
2777
  allowNodeModules,
2774
2778
  cjsRequireRewrite: true,
2775
- sharedClosureRoots: state.sharedClosureRoots
2779
+ sharedClosureRoots: cjsClosureRoots
2776
2780
  });
2777
2781
  }
2778
2782
  return null;
@@ -2789,7 +2793,7 @@ ${code}`, map: null };
2789
2793
  rewriteShared: state.command === "build" || state.normalized.devSharedSelf,
2790
2794
  allowNodeModules,
2791
2795
  cjsRequireRewrite: state.command === "build",
2792
- sharedClosureRoots: state.sharedClosureRoots
2796
+ sharedClosureRoots: cjsClosureRoots
2793
2797
  });
2794
2798
  },
2795
2799
  transformIndexHtml: {
@@ -2815,6 +2819,19 @@ ${code}`, map: null };
2815
2819
  if (state.command !== "build" || !state.normalized) return;
2816
2820
  const n = state.normalized;
2817
2821
  state.providerRoots = [];
2822
+ const providerRequire = (0, import_node_module3.createRequire)(import_node_path6.default.join(n.root, "package.json"));
2823
+ for (const item of n.shared) {
2824
+ if (item.import === false) continue;
2825
+ try {
2826
+ const file = providerRequire.resolve(item.import).replace(/\\/g, "/");
2827
+ const pos = file.lastIndexOf("/node_modules/");
2828
+ if (pos < 0) continue;
2829
+ const parts = file.slice(pos + "/node_modules/".length).split("/");
2830
+ const pkg = parts[0].startsWith("@") ? parts.slice(0, 2).join("/") : parts[0];
2831
+ state.providerRoots.push({ root: file.slice(0, pos + "/node_modules/".length) + pkg + "/", shareKey: item.shareKey });
2832
+ } catch {
2833
+ }
2834
+ }
2818
2835
  {
2819
2836
  for (const item of n.shared) {
2820
2837
  if (item.import === false) continue;
@@ -2826,7 +2843,10 @@ ${code}`, map: null };
2826
2843
  if (pos === -1) continue;
2827
2844
  const parts = file.slice(pos + marker.length).split("/");
2828
2845
  const pkg = parts[0].startsWith("@") ? parts.slice(0, 2).join("/") : parts[0];
2829
- state.providerRoots.push({ root: file.slice(0, pos + marker.length) + pkg + "/", shareKey: item.shareKey });
2846
+ const root = file.slice(0, pos + marker.length) + pkg + "/";
2847
+ if (!state.providerRoots.some((provider) => provider.root === root && provider.shareKey === item.shareKey)) {
2848
+ state.providerRoots.push({ root, shareKey: item.shareKey });
2849
+ }
2830
2850
  }
2831
2851
  }
2832
2852
  if (state.manualChunkSpecsPending) {
@@ -3212,7 +3232,7 @@ ${entryChunk.code}`;
3212
3232
  }
3213
3233
  }).find((o) => o !== null && /^https?:/.test(o ?? ""));
3214
3234
  if (!remoteOrigin) return html;
3215
- 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;
3235
+ 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;window.__vite_plugin_react_preamble_installed__ = true;(globalThis).${REACT_REFRESH_GLOBAL_KEY} ??= __fulgurjs_rr;</script>` + html;
3216
3236
  }
3217
3237
  const lastRef = html.lastIndexOf("/@react-refresh");
3218
3238
  const scriptEnd = html.indexOf("</script>", lastRef);