@fulgurjs/federation 6.13.2 → 6.13.4

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 +14 -0
  2. package/dist/bridge-app-react.js +4 -4
  3. package/dist/bridge-app-vue.cjs +4 -1
  4. package/dist/bridge-app-vue.js +5 -5
  5. package/dist/bridge-core.cjs +8 -2
  6. package/dist/bridge-core.js +4 -4
  7. package/dist/bridge-errors.cjs +9 -3
  8. package/dist/bridge-errors.js +2 -2
  9. package/dist/bridge-host-react.cjs +11 -5
  10. package/dist/bridge-host-react.js +9 -7
  11. package/dist/bridge-host-vue.cjs +11 -5
  12. package/dist/bridge-host-vue.js +9 -7
  13. package/dist/bridge-router-react.js +4 -1
  14. package/dist/bridge-router-vue.js +4 -1
  15. package/dist/bridge-session-auto.js +2 -2
  16. package/dist/{chunk-MBH3TVAS.js → chunk-ATU42YF3.js} +1 -1
  17. package/dist/{chunk-TSPZ3EQ4.js → chunk-EGXWY5NW.js} +5 -4
  18. package/dist/{chunk-NVJN2ARX.js → chunk-EK5JODE4.js} +2 -2
  19. package/dist/{chunk-2OHKAD6I.js → chunk-FXG2TWSA.js} +1 -1
  20. package/dist/{chunk-YHXQHZ3E.js → chunk-NX3HRELG.js} +9 -2
  21. package/dist/{chunk-OQ4CGWNL.js → chunk-Y7YANGLN.js} +1 -1
  22. package/dist/cli.js +2 -2
  23. package/dist/context.cjs +4 -1
  24. package/dist/context.js +2 -2
  25. package/dist/index.cjs +35 -8
  26. package/dist/index.js +35 -8
  27. package/dist/react-adapter.cjs +10 -4
  28. package/dist/react-adapter.js +7 -6
  29. package/dist/runtime.js +13 -13
  30. package/dist/vue-adapter.cjs +27 -12
  31. package/dist/vue-adapter.js +25 -15
  32. package/dist/vue-store.d.cts +1 -1
  33. package/dist/vue-store.d.ts +1 -1
  34. package/dist/vue.d.ts +1 -1
  35. package/docs/en/reference/errors.md +4 -1
  36. package/docs/zh/reference/errors.md +4 -1
  37. package/examples/templates/react-host-vue-remote/pnpm-lock.yaml +7 -7
  38. package/examples/templates/react-host-vue-remote/pnpm-workspace.yaml +1 -1
  39. package/examples/templates/react-host-vue-remote/react-host/package.json +1 -1
  40. package/examples/templates/react-host-vue-remote/vue-remote/package.json +1 -1
  41. package/examples/templates/react-react/host/package.json +1 -1
  42. package/examples/templates/react-react/pnpm-lock.yaml +7 -7
  43. package/examples/templates/react-react/pnpm-workspace.yaml +1 -1
  44. package/examples/templates/react-react/remote/package.json +1 -1
  45. package/examples/templates/showcase/pnpm-lock.yaml +11 -11
  46. package/examples/templates/showcase/pnpm-workspace.yaml +1 -1
  47. package/examples/templates/showcase/react-host/package.json +1 -1
  48. package/examples/templates/showcase/react-remote/package.json +1 -1
  49. package/examples/templates/showcase/vue-host/package.json +1 -1
  50. package/examples/templates/showcase/vue-remote/package.json +1 -1
  51. package/examples/templates/vue-host-react-remote/pnpm-lock.yaml +7 -7
  52. package/examples/templates/vue-host-react-remote/pnpm-workspace.yaml +1 -1
  53. package/examples/templates/vue-host-react-remote/react-remote/package.json +1 -1
  54. package/examples/templates/vue-host-react-remote/vue-host/package.json +1 -1
  55. package/examples/templates/vue-vue/host/package.json +1 -1
  56. package/examples/templates/vue-vue/pnpm-lock.yaml +7 -7
  57. package/examples/templates/vue-vue/pnpm-workspace.yaml +1 -1
  58. package/examples/templates/vue-vue/remote/package.json +1 -1
  59. package/package.json +1 -1
@@ -66,6 +66,12 @@ function resolvePageProviderEntries(list) {
66
66
  }
67
67
 
68
68
  // src/runtime/errors.ts
69
+ function diagnosticUrl(text) {
70
+ return text.replace(/(https?:\/\/)(?:[^\s/@]+@)?([^\s?#"'<>,。;))\]]+)(?:[?#][^\s"'<>,。;))\]]*)?/g, "$1$2");
71
+ }
72
+ function diagnosticMessage(error) {
73
+ return diagnosticUrl(String(error?.message ?? error)).replace(/\b(token|password|cookie|authorization)["']?\s*[:=]\s*["']?(?:Bearer\s+)?[^\s,;"'}]+/gi, "$1=[redacted]");
74
+ }
69
75
  var ErrorCodes = {
70
76
  /** 远程容器加载失败(网络/超时/重试耗尽/熔断) */
71
77
  REMOTE_LOAD_FAILED: "MFU-001",
@@ -97,7 +103,7 @@ var ErrorCodes = {
97
103
  SETUP_RECURSION: "MFU-014",
98
104
  /** 远程模块在组件消费边界导出的不是可渲染组件(适配器实测导出形态后报出) */
99
105
  COMPONENT_EXPORT_INVALID: "MFU-018",
100
- /** Vue 组件直渲染的渲染器与共享作用域实际收敛的 Vue 实例不一致(身份证据已证实) */
106
+ /** 当前编译 SFC 的 Vue 导入引用与消费方渲染器不一致(组件证据已证实) */
101
107
  VUE_RUNTIME_IDENTITY_MISMATCH: "MFU-019",
102
108
  /** 远程组件子树内部渲染错误(插件边界观测:setup/render/嵌套异步组件拒绝;原始异常保留在 cause) */
103
109
  REMOTE_RENDER_ERROR: "MFU-020"
@@ -379,7 +385,7 @@ var SECONDARY_BUTTON_STYLE = {
379
385
  var DefaultErrorView = function FulgurjsRemoteError({ error, retry, phase }) {
380
386
  const err = error;
381
387
  const code = err?.code ?? "UNKNOWN";
382
- const message = err?.message ?? String(error ?? "unknown error");
388
+ const message = diagnosticMessage(err ?? error ?? "unknown error");
383
389
  return (0, import_react.createElement)("div", { style: ERROR_STYLE, "data-fulgurjs-error": code }, [
384
390
  (0, import_react.createElement)(
385
391
  "p",
@@ -431,7 +437,7 @@ var RemoteErrorBoundary = class extends import_react.Component {
431
437
  return { error };
432
438
  }
433
439
  componentDidCatch(error, info) {
434
- console.error("[fulgurjs] \u8FDC\u7A0B\u7EC4\u4EF6\u6E32\u67D3\u5F02\u5E38\uFF08RemoteErrorBoundary \u6355\u83B7\uFF09\uFF1A", error, info?.componentStack ?? "");
440
+ console.error("[fulgurjs] \u8FDC\u7A0B\u7EC4\u4EF6\u6E32\u67D3\u5F02\u5E38\uFF08RemoteErrorBoundary \u6355\u83B7\uFF09\uFF1A", diagnosticMessage(error), diagnosticMessage(info?.componentStack ?? ""));
435
441
  this.props.onError?.(error, info);
436
442
  }
437
443
  componentDidUpdate(prev) {
@@ -538,7 +544,7 @@ var RemoteRenderBoundary = class extends import_react.Component {
538
544
  return { error };
539
545
  }
540
546
  componentDidCatch(error, info) {
541
- console.error("[fulgurjs] \u8FDC\u7A0B\u7EC4\u4EF6\u6E32\u67D3\u5F02\u5E38\uFF08remoteComponent \u5185\u7F6E\u8FB9\u754C\uFF09\uFF1A", error, info?.componentStack ?? "");
547
+ console.error("[fulgurjs] \u8FDC\u7A0B\u7EC4\u4EF6\u6E32\u67D3\u5F02\u5E38\uFF08remoteComponent \u5185\u7F6E\u8FB9\u754C\uFF09\uFF1A", diagnosticMessage(error), diagnosticMessage(info?.componentStack ?? ""));
542
548
  const spec = this.props.spec;
543
549
  const remote = remoteNameOf(spec);
544
550
  reportRemoteObservation({
@@ -8,11 +8,12 @@ import {
8
8
  reportRemoteObservation,
9
9
  resolvePageProviderEntries,
10
10
  shouldResetSessionCache
11
- } from "./chunk-2OHKAD6I.js";
11
+ } from "./chunk-FXG2TWSA.js";
12
12
  import "./chunk-TSXZ7TWA.js";
13
13
  import {
14
- ErrorCodes
15
- } from "./chunk-YHXQHZ3E.js";
14
+ ErrorCodes,
15
+ diagnosticMessage
16
+ } from "./chunk-NX3HRELG.js";
16
17
 
17
18
  // src/react-adapter.ts
18
19
  import {
@@ -59,7 +60,7 @@ var SECONDARY_BUTTON_STYLE = {
59
60
  var DefaultErrorView = function FulgurjsRemoteError({ error, retry, phase }) {
60
61
  const err = error;
61
62
  const code = err?.code ?? "UNKNOWN";
62
- const message = err?.message ?? String(error ?? "unknown error");
63
+ const message = diagnosticMessage(err ?? error ?? "unknown error");
63
64
  return createElement("div", { style: ERROR_STYLE, "data-fulgurjs-error": code }, [
64
65
  createElement(
65
66
  "p",
@@ -111,7 +112,7 @@ var RemoteErrorBoundary = class extends Component {
111
112
  return { error };
112
113
  }
113
114
  componentDidCatch(error, info) {
114
- console.error("[fulgurjs] \u8FDC\u7A0B\u7EC4\u4EF6\u6E32\u67D3\u5F02\u5E38\uFF08RemoteErrorBoundary \u6355\u83B7\uFF09\uFF1A", error, info?.componentStack ?? "");
115
+ console.error("[fulgurjs] \u8FDC\u7A0B\u7EC4\u4EF6\u6E32\u67D3\u5F02\u5E38\uFF08RemoteErrorBoundary \u6355\u83B7\uFF09\uFF1A", diagnosticMessage(error), diagnosticMessage(info?.componentStack ?? ""));
115
116
  this.props.onError?.(error, info);
116
117
  }
117
118
  componentDidUpdate(prev) {
@@ -218,7 +219,7 @@ var RemoteRenderBoundary = class extends Component {
218
219
  return { error };
219
220
  }
220
221
  componentDidCatch(error, info) {
221
- console.error("[fulgurjs] \u8FDC\u7A0B\u7EC4\u4EF6\u6E32\u67D3\u5F02\u5E38\uFF08remoteComponent \u5185\u7F6E\u8FB9\u754C\uFF09\uFF1A", error, info?.componentStack ?? "");
222
+ console.error("[fulgurjs] \u8FDC\u7A0B\u7EC4\u4EF6\u6E32\u67D3\u5F02\u5E38\uFF08remoteComponent \u5185\u7F6E\u8FB9\u754C\uFF09\uFF1A", diagnosticMessage(error), diagnosticMessage(info?.componentStack ?? ""));
222
223
  const spec = this.props.spec;
223
224
  const remote = remoteNameOf(spec);
224
225
  reportRemoteObservation({
package/dist/runtime.js CHANGED
@@ -1,6 +1,6 @@
1
- var Pe=/^v?(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:-((?:[0-9A-Za-z-]+)(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z.-]+)?$/;function U(c){let d=Pe.exec(String(c).trim());return d?{major:Number(d[1]),minor:Number(d[2]??0),patch:Number(d[3]??0),pre:d[4]?d[4].split("."):[]}:null}function _e(c,d){if(c.length===0&&d.length===0)return 0;if(c.length===0)return 1;if(d.length===0)return-1;let f=Math.max(c.length,d.length);for(let l=0;l<f;l++){let m=c[l],S=d[l];if(m===void 0)return-1;if(S===void 0)return 1;let b=/^\d+$/.test(m),P=/^\d+$/.test(S);if(b&&P){let L=Number(m)-Number(S);if(L!==0)return L}else{if(b!==P)return b?-1:1;if(m!==S)return m<S?-1:1}}return 0}function I(c,d){let f=U(c),l=U(d);return!f||!l?c<d?-1:c>d?1:0:f.major!==l.major?f.major-l.major:f.minor!==l.minor?f.minor-l.minor:f.patch!==l.patch?f.patch-l.patch:_e(f.pre,l.pre)}var $e=/^[a-z]+[+:-]/i;function j(c,d){if(d===!1||d==null||d==="")return!0;let f=String(d).trim();return!f||f==="*"||f==="latest"||$e.test(f)?!0:f.split("||").some(l=>ke(c,l.trim()))}function ke(c,d){if(!d||d==="*")return!U(c)?.pre.length;let f=d.split(/\s+-\s+/);if(f.length===2){let S=f[0].trim(),b=f[1].trim();return!(!j(c,`>=${S}`)||!j(c,`<=${b}`))}let l=U(c);if(!l)return!1;let m=Oe(d);if(m===null)return!0;for(let S of m)if(!Ie(l,c,S))return!1;return!(l.pre.length>0&&!m.some(S=>S.ver.pre.length>0)&&!m.some(b=>b.ver.major===l.major&&b.ver.minor===l.minor&&b.ver.patch===l.patch))}function Oe(c){let d=[],f=c.trim().split(/\s+/).filter(Boolean);if(f.length===0)return null;for(let l of f){let m=/^(>=|<=|>|<|=|\^|~)?(.*)$/.exec(l);if(!m)return null;let S=m[1],b=m[2],P=Me(S,b);if(P===null)return null;d.push(...P)}return d}function Me(c,d){let f=Le(d);if(!f)return null;let{ver:l,partial:m}=f;switch(c){case"^":{let S=Te(l);return S?[{op:">=",ver:l},{op:"<",ver:S}]:null}case"~":{let S=m>=2?{major:l.major,minor:l.minor+1,patch:0,pre:[]}:{major:l.major+1,minor:0,patch:0,pre:[]};return[{op:">=",ver:l},{op:"<",ver:S}]}case">=":return[{op:">=",ver:l}];case">":return m===1?[{op:">=",ver:{major:l.major+1,minor:0,patch:0,pre:[]}}]:m===2?[{op:">=",ver:{major:l.major,minor:l.minor+1,patch:0,pre:[]}}]:[{op:">",ver:l}];case"<":return m===1?[{op:"<",ver:{major:l.major,minor:0,patch:0,pre:[]}}]:m===2?[{op:"<",ver:{major:l.major,minor:l.minor,patch:0,pre:[]}}]:[{op:"<",ver:l}];case"<=":return[{op:"<=",ver:l}];case"=":case void 0:return m===1?[{op:">=",ver:l},{op:"<",ver:{major:l.major+1,minor:0,patch:0,pre:[]}}]:m===2?[{op:">=",ver:l},{op:"<",ver:{major:l.major,minor:l.minor+1,patch:0,pre:[]}}]:[{op:"=",ver:l}];default:return null}}function Te(c){return c.major>0?{major:c.major+1,minor:0,patch:0,pre:[]}:c.minor>0?{major:0,minor:c.minor+1,patch:0,pre:[]}:{major:0,minor:0,patch:c.patch+1,pre:[]}}function Le(c){let d=c.replace(/^v/,"").trim();if(!d||d==="*"||d==="x"||d==="X")return{ver:{major:0,minor:0,patch:0,pre:[]},partial:0};let f=d.split("."),l=[],m=0;for(let P of f.slice(0,3))if(/^\d+$/.test(P))l.push(Number(P)),m++;else{if(P==="x"||P==="X"||P==="*")break;break}let S=d.split("-"),b=S.length>1?S.slice(1).join("-").split("+")[0].split("."):[];return m===0&&b.length===0?{ver:{major:0,minor:0,patch:0,pre:[]},partial:0}:{ver:{major:l[0]??0,minor:l[1]??0,patch:l[2]??0,pre:b},partial:m}}function Ae(c,d){switch(d){case">=":return c>=0;case">":return c>0;case"<":return c<0;case"<=":return c<=0;case"=":return c===0}}function Ie(c,d,f){let l=`${c.major}.${c.minor}.${c.patch}`+(c.pre.length?`-${c.pre.join(".")}`:"");if(f.upper)return!(!(I(l,`${f.ver.major}.${f.ver.minor}.${f.ver.patch}`+(f.ver.pre.length?`-${f.ver.pre.join(".")}`:""))>=0)||!(I(l,`${f.upper.major}.${f.upper.minor}.${f.upper.patch}`)<0));let m=I(l,`${f.ver.major}.${f.ver.minor}.${f.ver.patch}`+(f.ver.pre.length?`-${f.ver.pre.join(".")}`:"")),S=Ae(m,f.op);return f.ver.pre.length>0&&c.pre.length===0&&(f.op===">"||f.op==="<")?!1:S}var E=class extends Error{code;details;constructor(d,f,l,m){super(`[fulgurjs:${d}] ${f}`,m),this.name="FgError",this.code=d,this.details=l}},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",COMPONENT_EXPORT_INVALID:"MFU-018",VUE_RUNTIME_IDENTITY_MISMATCH:"MFU-019",REMOTE_RENDER_ERROR:"MFU-020"};function te(c){if(typeof c!="object"||c===null)return!1;let d=globalThis,f=d.__FULGURJS_REPORTED_ERRORS__??=new WeakSet;return f.has(c)?!0:(f.add(c),!1)}var oe="6.13.2";var je="__fulgurjsSetup",xe="__FULGURJS_APP_CONFIG__",G=15e3,se=2,Ue=5,Ne=3e4,Ce=4e3,Fe=.2;function Ve(){let c=Object.create(null),d=new Map,f=[],l=new Set,m=new Map,S=(e,r)=>JSON.stringify([r.shareScope||"default",r.shareKey||e,r.requiredVersion??null,!!r.singleton,!!r.strictVersion]),b=new Map,P=new Map,L=new WeakMap,N=new WeakMap,$={},ae=()=>{for(let e of f)try{e.init?.($)}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,V=e=>{let r=C.get(e);return r||C.set(e,r={}),r},X=()=>globalThis[xe]??{};async function J(e,r,n,o){let t=u=>{if(u instanceof E)return v({remote:e,error:u}),u;let a=new E(R.SETUP_RUN_FAILED,`\u73B0\u8C61\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${e}" \u7684 ${o} \u521D\u59CB\u5316\u5931\u8D25\u3002
2
- \u539F\u56E0\uFF1A${String(u?.message??u)}
3
- \u4FEE\u6CD5\uFF1A\u68C0\u67E5\u5E76\u4FEE\u590D\u8BE5 ${o} \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:o},{cause:u});return v({remote:e,error:a}),a};F=e;let s;try{s=r(n)}catch(u){throw t(u)}finally{F=void 0}try{await s}catch(u){throw t(u)}}async function ce(e,r,n,o){e.debug.setup="pending";try{if(e.manifestUrl)try{await H(`${e.name}/${n}`)}catch{}let t=await r.get(n),s=t?.default,u=t?.onSession!==void 0||t?.globalComponents!==void 0||t?.pageProviders!==void 0;if(s!==void 0&&typeof s!="function"||!s&&!u)throw new E(R.SETUP_INVALID_EXPORT,`\u73B0\u8C61\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${e.name}" \u7684 setup \u6A21\u5757 "${n}" \u65E0\u6CD5\u521D\u59CB\u5316\u3002
1
+ var ke=/^v?(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:-((?:[0-9A-Za-z-]+)(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z.-]+)?$/;function C(c){let d=ke.exec(String(c).trim());return d?{major:Number(d[1]),minor:Number(d[2]??0),patch:Number(d[3]??0),pre:d[4]?d[4].split("."):[]}:null}function Oe(c,d){if(c.length===0&&d.length===0)return 0;if(c.length===0)return 1;if(d.length===0)return-1;let f=Math.max(c.length,d.length);for(let l=0;l<f;l++){let m=c[l],S=d[l];if(m===void 0)return-1;if(S===void 0)return 1;let b=/^\d+$/.test(m),P=/^\d+$/.test(S);if(b&&P){let A=Number(m)-Number(S);if(A!==0)return A}else{if(b!==P)return b?-1:1;if(m!==S)return m<S?-1:1}}return 0}function x(c,d){let f=C(c),l=C(d);return!f||!l?c<d?-1:c>d?1:0:f.major!==l.major?f.major-l.major:f.minor!==l.minor?f.minor-l.minor:f.patch!==l.patch?f.patch-l.patch:Oe(f.pre,l.pre)}var Me=/^[a-z]+[+:-]/i;function U(c,d){if(d===!1||d==null||d==="")return!0;let f=String(d).trim();return!f||f==="*"||f==="latest"||Me.test(f)?!0:f.split("||").some(l=>Te(c,l.trim()))}function Te(c,d){if(!d||d==="*")return!C(c)?.pre.length;let f=d.split(/\s+-\s+/);if(f.length===2){let S=f[0].trim(),b=f[1].trim();return!(!U(c,`>=${S}`)||!U(c,`<=${b}`))}let l=C(c);if(!l)return!1;let m=Le(d);if(m===null)return!0;for(let S of m)if(!je(l,c,S))return!1;return!(l.pre.length>0&&!m.some(S=>S.ver.pre.length>0)&&!m.some(b=>b.ver.major===l.major&&b.ver.minor===l.minor&&b.ver.patch===l.patch))}function Le(c){let d=[],f=c.trim().split(/\s+/).filter(Boolean);if(f.length===0)return null;for(let l of f){let m=/^(>=|<=|>|<|=|\^|~)?(.*)$/.exec(l);if(!m)return null;let S=m[1],b=m[2],P=Ae(S,b);if(P===null)return null;d.push(...P)}return d}function Ae(c,d){let f=xe(d);if(!f)return null;let{ver:l,partial:m}=f;switch(c){case"^":{let S=Ie(l);return S?[{op:">=",ver:l},{op:"<",ver:S}]:null}case"~":{let S=m>=2?{major:l.major,minor:l.minor+1,patch:0,pre:[]}:{major:l.major+1,minor:0,patch:0,pre:[]};return[{op:">=",ver:l},{op:"<",ver:S}]}case">=":return[{op:">=",ver:l}];case">":return m===1?[{op:">=",ver:{major:l.major+1,minor:0,patch:0,pre:[]}}]:m===2?[{op:">=",ver:{major:l.major,minor:l.minor+1,patch:0,pre:[]}}]:[{op:">",ver:l}];case"<":return m===1?[{op:"<",ver:{major:l.major,minor:0,patch:0,pre:[]}}]:m===2?[{op:"<",ver:{major:l.major,minor:l.minor,patch:0,pre:[]}}]:[{op:"<",ver:l}];case"<=":return[{op:"<=",ver:l}];case"=":case void 0:return m===1?[{op:">=",ver:l},{op:"<",ver:{major:l.major+1,minor:0,patch:0,pre:[]}}]:m===2?[{op:">=",ver:l},{op:"<",ver:{major:l.major,minor:l.minor+1,patch:0,pre:[]}}]:[{op:"=",ver:l}];default:return null}}function Ie(c){return c.major>0?{major:c.major+1,minor:0,patch:0,pre:[]}:c.minor>0?{major:0,minor:c.minor+1,patch:0,pre:[]}:{major:0,minor:0,patch:c.patch+1,pre:[]}}function xe(c){let d=c.replace(/^v/,"").trim();if(!d||d==="*"||d==="x"||d==="X")return{ver:{major:0,minor:0,patch:0,pre:[]},partial:0};let f=d.split("."),l=[],m=0;for(let P of f.slice(0,3))if(/^\d+$/.test(P))l.push(Number(P)),m++;else{if(P==="x"||P==="X"||P==="*")break;break}let S=d.split("-"),b=S.length>1?S.slice(1).join("-").split("+")[0].split("."):[];return m===0&&b.length===0?{ver:{major:0,minor:0,patch:0,pre:[]},partial:0}:{ver:{major:l[0]??0,minor:l[1]??0,patch:l[2]??0,pre:b},partial:m}}function Ue(c,d){switch(d){case">=":return c>=0;case">":return c>0;case"<":return c<0;case"<=":return c<=0;case"=":return c===0}}function je(c,d,f){let l=`${c.major}.${c.minor}.${c.patch}`+(c.pre.length?`-${c.pre.join(".")}`:"");if(f.upper)return!(!(x(l,`${f.ver.major}.${f.ver.minor}.${f.ver.patch}`+(f.ver.pre.length?`-${f.ver.pre.join(".")}`:""))>=0)||!(x(l,`${f.upper.major}.${f.upper.minor}.${f.upper.patch}`)<0));let m=x(l,`${f.ver.major}.${f.ver.minor}.${f.ver.patch}`+(f.ver.pre.length?`-${f.ver.pre.join(".")}`:"")),S=Ue(m,f.op);return f.ver.pre.length>0&&c.pre.length===0&&(f.op===">"||f.op==="<")?!1:S}function F(c){return c.replace(/(https?:\/\/)(?:[^\s/@]+@)?([^\s?#"'<>,。;))\]]+)(?:[?#][^\s"'<>,。;))\]]*)?/g,"$1$2")}function M(c){return F(String(c?.message??c)).replace(/\b(token|password|cookie|authorization)["']?\s*[:=]\s*["']?(?:Bearer\s+)?[^\s,;"'}]+/gi,"$1=[redacted]")}var E=class extends Error{code;details;constructor(d,f,l,m){super(`[fulgurjs:${d}] ${F(f)}`,m),this.name="FgError",this.code=d,this.details=l}},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",COMPONENT_EXPORT_INVALID:"MFU-018",VUE_RUNTIME_IDENTITY_MISMATCH:"MFU-019",REMOTE_RENDER_ERROR:"MFU-020"};function ie(c){if(typeof c!="object"||c===null)return!1;let d=globalThis,f=d.__FULGURJS_REPORTED_ERRORS__??=new WeakSet;return f.has(c)?!0:(f.add(c),!1)}var ae="6.13.4";var Ne="__fulgurjsSetup",Ce="__FULGURJS_APP_CONFIG__",J=15e3,ce=2,Fe=5,Ve=3e4,De=4e3,Ke=.2;function qe(){let c=Object.create(null),d=new Map,f=[],l=new Set,m=new Map,S=(e,r)=>JSON.stringify([r.shareScope||"default",r.shareKey||e,r.requiredVersion??null,!!r.singleton,!!r.strictVersion]),b=new Map,P=new Map,A=new WeakMap,V=new WeakMap,W=(e,r)=>{console.warn(`[fulgurjs] ${e} \u94A9\u5B50\u5931\u8D25\uFF08\u4E0D\u5F71\u54CD\u52A0\u8F7D\uFF09\uFF0C\u8BF7\u68C0\u67E5\uFF1A`,M(r))},_={},ue=()=>{for(let e of f)try{e.init?.(_)}catch(r){console.warn("[fulgurjs] \u6269\u5C55\u521D\u59CB\u5316\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\uFF1A",e.name,M(r))}},D=new Map,K,q=e=>{let r=D.get(e);return r||D.set(e,r={}),r},z=()=>globalThis[Ce]??{};async function Y(e,r,n,o){let t=u=>{if(u instanceof E)return v({remote:e,error:u}),u;let a=new E(R.SETUP_RUN_FAILED,`\u73B0\u8C61\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${e}" \u7684 ${o} \u521D\u59CB\u5316\u5931\u8D25\u3002
2
+ \u539F\u56E0\uFF1A${M(u)}
3
+ \u4FEE\u6CD5\uFF1A\u68C0\u67E5\u5E76\u4FEE\u590D\u8BE5 ${o} \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:o},{cause:u});return v({remote:e,error:a}),a};K=e;let s;try{s=r(n)}catch(u){throw t(u)}finally{K=void 0}try{await s}catch(u){throw t(u)}}async function de(e,r,n,o){e.debug.setup="pending";try{if(e.manifestUrl)try{await B(`${e.name}/${n}`)}catch{}let t=await r.get(n),s=t?.default,u=t?.onSession!==void 0||t?.globalComponents!==void 0||t?.pageProviders!==void 0;if(s!==void 0&&typeof s!="function"||!s&&!u)throw new E(R.SETUP_INVALID_EXPORT,`\u73B0\u8C61\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${e.name}" \u7684 setup \u6A21\u5757 "${n}" \u65E0\u6CD5\u521D\u59CB\u5316\u3002
4
4
  \u539F\u56E0\uFF1A\u9ED8\u8BA4\u5BFC\u51FA\u7C7B\u578B\u4E3A ${t==null?String(t):typeof s}\uFF0C\u4E14\u6A21\u5757\u4E0D\u6EE1\u8DB3\u521D\u59CB\u5316\u58F0\u660E\u5951\u7EA6\u3002
5
5
  \u4FEE\u6CD5\uFF1A\u9ED8\u8BA4\u5BFC\u51FA\u521D\u59CB\u5316\u51FD\u6570\uFF0C\u6216\u53EA\u58F0\u660E onSession/globalComponents/pageProviders\uFF1B\u7A7A\u6A21\u5757\u4E0E\u975E\u51FD\u6570\u9ED8\u8BA4\u5BFC\u51FA\u65E0\u6548\u3002`,{remote:e.name,module:n});if(t.onSession!==void 0&&typeof t.onSession!="function")throw new E(R.SETUP_INVALID_EXPORT,`\u73B0\u8C61\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${e.name}" \u7684 setup \u6A21\u5757 "${n}" \u65E0\u6CD5\u521D\u59CB\u5316\u3002
6
6
  \u539F\u56E0\uFF1AonSession \u5BFC\u51FA\u7C7B\u578B\u4E3A ${typeof t.onSession}\uFF0C\u5E94\u4E3A\u51FD\u6570\u3002
@@ -8,25 +8,25 @@ var Pe=/^v?(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:-((?:[0-9A-Za-z-]+)(?:\.[0-9A-Za-z-]+
8
8
  \u539F\u56E0\uFF1AglobalComponents \u5BFC\u51FA\u7C7B\u578B\u4E3A ${Array.isArray(t.globalComponents)?"array":typeof t.globalComponents}\uFF0C\u5E94\u4E3A\u5BF9\u8C61\uFF08\u952E=\u7EC4\u4EF6\u6CE8\u518C\u540D\uFF0C\u503C=\u7EC4\u4EF6\uFF09\u3002
9
9
  \u4FEE\u6CD5\uFF1A\u6539\u4E3A export const globalComponents = { \u7EC4\u4EF6\u6CE8\u518C\u540D: \u7EC4\u4EF6 } \u5F62\u6001\uFF0C\u6216\u5220\u9664\u8BE5\u5BFC\u51FA\u3002`,{remote:e.name,module:n});o.globalComponents=t.globalComponents}if(t.pageProviders!==void 0){if(!Array.isArray(t.pageProviders))throw new E(R.SETUP_INVALID_EXPORT,`\u73B0\u8C61\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${e.name}" \u7684 setup \u6A21\u5757 "${n}" \u65E0\u6CD5\u521D\u59CB\u5316\u3002
10
10
  \u539F\u56E0\uFF1ApageProviders \u5BFC\u51FA\u7C7B\u578B\u4E3A ${typeof t.pageProviders}\uFF0C\u5E94\u4E3A\u6570\u7EC4\uFF08\u6BCF\u9879=\u7EC4\u4EF6\u6216\u96F6\u53C2 loader\uFF09\u3002
11
- \u4FEE\u6CD5\uFF1A\u6539\u4E3A export const pageProviders = [AppProvider] \u6216 [() => import('./X').then((m) => m.AppProvider)] \u5F62\u6001\uFF0C\u6216\u5220\u9664\u8BE5\u5BFC\u51FA\u3002`,{remote:e.name,module:n});o.pageProviders=t.pageProviders}s&&await J(e.name,s,{appContext:X(),signal:(o.controller??=new AbortController).signal},"setup"),e.debug.setup="ready"}catch(t){throw e.debug.setup="failed",t?.code&&v({remote:e.name,error:t}),o.setupExports=void 0,o.globalComponents=void 0,o.pageProviders=void 0,t}}async function le(e,r,n){let o=X(),t=o?.sessionKey;if(typeof t!="string"||t===""){let y=new E(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
11
+ \u4FEE\u6CD5\uFF1A\u6539\u4E3A export const pageProviders = [AppProvider] \u6216 [() => import('./X').then((m) => m.AppProvider)] \u5F62\u6001\uFF0C\u6216\u5220\u9664\u8BE5\u5BFC\u51FA\u3002`,{remote:e.name,module:n});o.pageProviders=t.pageProviders}s&&await Y(e.name,s,{appContext:z(),signal:(o.controller??=new AbortController).signal},"setup"),e.debug.setup="ready"}catch(t){throw e.debug.setup="failed",t?.code&&v({remote:e.name,error:t}),o.setupExports=void 0,o.globalComponents=void 0,o.pageProviders=void 0,t}}async function fe(e,r,n){let o=z(),t=o?.sessionKey;if(typeof t!="string"||t===""){let y=new E(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
12
12
  \u539F\u56E0\uFF1A\u5F53\u524D\u503C\u4E3A ${t===void 0?"\u7F3A\u5931":JSON.stringify(t)}\u3002
13
- \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});throw v({remote:e.name,error:y}),y}if(r.sessionPromise&&r.sessionKey===t)return r.sessionPromise;r.controller?.abort();let s=new AbortController;r.controller=s,r.sessionKey=t;let u=r.sessionPromise?r.sessionPromise.catch(()=>{}):Promise.resolve(),a=(async()=>{await u,!s.signal.aborted&&await J(e.name,n,{appContext:o,sessionKey:t,signal:s.signal},"onSession")})();return r.sessionPromise=a,a.catch(()=>{r.sessionKey===t&&(r.sessionKey=void 0,r.sessionPromise=void 0)}),a}async function ue(e,r){let n=r?.[je];if(typeof n!="string"||n==="")return;let o=V(e.name);o.setupPromise||(o.setupPromise=ce(e,r,n,o).catch(s=>{throw o.setupPromise=void 0,s})),await o.setupPromise;let t=o.setupExports?.onSession;typeof t=="function"&&await le(e,o,t)}function de(){for(let e of C.values()){try{e.controller?.abort()}catch{}e.sessionKey=void 0,e.sessionPromise=void 0}}let T=e=>c[e]??=Object.create(null);function v(e){if(!te(e.error)){try{$.onRemoteError?.(e)}catch{}typeof window<"u"&&window.dispatchEvent(new CustomEvent("fulgurjs:error",{detail:e}))}}function fe(e="default"){return T(e),c}function D(e,r,n,o,t={}){let s=T(e||"default"),u=Object.hasOwn(s,r)?s[r]:void 0,a=u&&typeof u=="object"?u:void 0;a||(a=Object.create(null),s[r]=a),!(Object.hasOwn(a,n)&&a[n])&&(a[n]={version:n,get:o,from:t.from??"unknown",eager:!!t.eager,loaded:!!t.loaded})}function pe(e){let r=(n,o,t)=>{if(n===void 0)return;if(!(typeof n=="number"&&(t?Number.isInteger(n)&&n>=0&&n<=10:Number.isFinite(n)&&n>0)))throw new Error(`[fulgurjs] \u8FDC\u7A0B\u5E94\u7528 "${e.name}" \u7684 ${o} \u914D\u7F6E\u65E0\u6548\uFF1A\u5F53\u524D\u4E3A ${String(n)}\uFF0C\u5E94\u4E3A${t?" 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 B(e){for(let r of e){pe(r);let n=d.get(r.name);d.set(r.name,{timeout:G,retries:se,...n,...r,breakerThreshold:r.breaker?.threshold??n?.breakerThreshold??Ue,breakerResetMs:r.breaker?.resetMs??n?.breakerResetMs??Ne,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 me(e){B([e])}function ge(e){f.push(...e),m.clear(),ae()}function A(e,r,n=!1){let o=r.shareScope||"default",t=r.shareKey||e,u=T(o)[t]||{},a=Object.keys(u).filter(i=>!n||r.singleton||u[i].value!==void 0);if(n&&a.length===0)return;let y=r.requiredVersion,g=a.filter(i=>y===void 0||y===!1||j(i,y)),p;if(r.singleton&&a.length>0){let i=a.filter(h=>u[h].loaded);if(p=[...i.length?i:a].sort(I).pop(),!g.includes(p)){let h=u[p],O=`\u73B0\u8C61\uFF1A\u5171\u4EAB\u5355\u4F8B "${t}" \u7684\u5B9E\u9645\u7248\u672C\u4E0D\u6EE1\u8DB3\u5F53\u524D\u5E94\u7528\u8981\u6C42\u3002
13
+ \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});throw v({remote:e.name,error:y}),y}if(r.sessionPromise&&r.sessionKey===t)return r.sessionPromise;r.controller?.abort();let s=new AbortController;r.controller=s,r.sessionKey=t;let u=r.sessionPromise?r.sessionPromise.catch(()=>{}):Promise.resolve(),a=(async()=>{await u,!s.signal.aborted&&await Y(e.name,n,{appContext:o,sessionKey:t,signal:s.signal},"onSession")})();return r.sessionPromise=a,a.catch(()=>{r.sessionKey===t&&(r.sessionKey=void 0,r.sessionPromise=void 0)}),a}async function pe(e,r){let n=r?.[Ne];if(typeof n!="string"||n==="")return;let o=q(e.name);o.setupPromise||(o.setupPromise=de(e,r,n,o).catch(s=>{throw o.setupPromise=void 0,s})),await o.setupPromise;let t=o.setupExports?.onSession;typeof t=="function"&&await fe(e,o,t)}function me(){for(let e of D.values()){try{e.controller?.abort()}catch{}e.sessionKey=void 0,e.sessionPromise=void 0}}let L=e=>c[e]??=Object.create(null);function v(e){if(!ie(e.error)){try{_.onRemoteError?.(e)}catch{}typeof window<"u"&&window.dispatchEvent(new CustomEvent("fulgurjs:error",{detail:e}))}}function ge(e="default"){return L(e),c}function H(e,r,n,o,t={}){let s=L(e||"default"),u=Object.hasOwn(s,r)?s[r]:void 0,a=u&&typeof u=="object"?u:void 0;a||(a=Object.create(null),s[r]=a),!(Object.hasOwn(a,n)&&a[n])&&(a[n]={version:n,get:o,from:t.from??"unknown",eager:!!t.eager,loaded:!!t.loaded})}function he(e){let r=(n,o,t)=>{if(n===void 0)return;if(!(typeof n=="number"&&(t?Number.isInteger(n)&&n>=0&&n<=10:Number.isFinite(n)&&n>0)))throw new Error(`[fulgurjs] \u8FDC\u7A0B\u5E94\u7528 "${e.name}" \u7684 ${o} \u914D\u7F6E\u65E0\u6548\uFF1A\u5F53\u524D\u4E3A ${String(n)}\uFF0C\u5E94\u4E3A${t?" 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 Z(e){for(let r of e){he(r);let n=d.get(r.name);d.set(r.name,{timeout:J,retries:ce,...n,...r,breakerThreshold:r.breaker?.threshold??n?.breakerThreshold??Fe,breakerResetMs:r.breaker?.resetMs??n?.breakerResetMs??Ve,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:j(r.entry),status:"idle",setup:"none"}})}}function ye(e){Z([e])}function Se(e){f.push(...e),m.clear(),ue()}function I(e,r,n=!1){let o=r.shareScope||"default",t=r.shareKey||e,u=L(o)[t]||{},a=Object.keys(u).filter(i=>!n||r.singleton||u[i].value!==void 0);if(n&&a.length===0)return;let y=r.requiredVersion,g=a.filter(i=>y===void 0||y===!1||U(i,y)),p;if(r.singleton&&a.length>0){let i=a.filter(h=>u[h].loaded);if(p=[...i.length?i:a].sort(x).pop(),!g.includes(p)){let h=u[p],O=`\u73B0\u8C61\uFF1A\u5171\u4EAB\u5355\u4F8B "${t}" \u7684\u5B9E\u9645\u7248\u672C\u4E0D\u6EE1\u8DB3\u5F53\u524D\u5E94\u7528\u8981\u6C42\u3002
14
14
  \u539F\u56E0\uFF1A\u5E94\u7528\u8981\u6C42 ${y??"\u4EFB\u610F\u7248\u672C"}\uFF0C\u4F5C\u7528\u57DF\u4E2D\u6709 ${a.join("\u3001")}\uFF1B\u4E3A\u4FDD\u8BC1\u5168\u9875\u53EA\u4F7F\u7528\u4E00\u4E2A\u5B9E\u4F8B\uFF0C\u6700\u7EC8\u590D\u7528 ${h.from} \u63D0\u4F9B\u7684 ${p}\u3002
15
15
  \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
16
- \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 M=new E(R.SHARE_STRICT_VERSION,O,{shareKey:t,requiredVersion:y});throw v({remote:h.from,error:M}),M}let _=`${o}|${t}|${y??"*"}|${p}|${a.join(",")}`;l.has(_)||(l.add(_),console.warn(`[fulgurjs:MFU-010] ${O}`))}}else if(p=[...g].sort(I).pop(),!p){if(r.strictVersion){let i=new E(R.SHARE_STRICT_VERSION,`\u73B0\u8C61\uFF1A\u5171\u4EAB\u4F5C\u7528\u57DF "${o}" \u4E2D\u627E\u4E0D\u5230\u7B26\u5408\u8981\u6C42\u7684 "${t}"\u3002
16
+ \u4FEE\u6CD5\uFF1A\u7EDF\u4E00\u5BBF\u4E3B\u4E0E\u8FDC\u7A0B\u7684\u4F9D\u8D56\u7248\u672C\uFF0C\u6216\u6838\u5BF9\u540E\u8C03\u6574 shared.requiredVersion\uFF1B\u82E5\u5FC5\u987B\u62D2\u7EDD\u4E0D\u517C\u5BB9\u7248\u672C\uFF0C\u8BF7\u542F\u7528 strictVersion\u3002`;if(r.strictVersion){let T=new E(R.SHARE_STRICT_VERSION,O,{shareKey:t,requiredVersion:y});throw v({remote:h.from,error:T}),T}let $=`${o}|${t}|${y??"*"}|${p}|${a.join(",")}`;l.has($)||(l.add($),console.warn(`[fulgurjs:MFU-010] ${O}`))}}else if(p=[...g].sort(x).pop(),!p){if(r.strictVersion){let i=new E(R.SHARE_STRICT_VERSION,`\u73B0\u8C61\uFF1A\u5171\u4EAB\u4F5C\u7528\u57DF "${o}" \u4E2D\u627E\u4E0D\u5230\u7B26\u5408\u8981\u6C42\u7684 "${t}"\u3002
17
17
  \u539F\u56E0\uFF1A\u8981\u6C42\u7248\u672C ${y}\uFF0C\u5F53\u524D\u53EF\u7528\u7248\u672C\u4E3A ${a.join("\u3001")||"\u65E0"}\u3002
18
- \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:t,error:i}),i}return}return u[p]}function W(e,r,n){let o=r.localVersion;if(!o||n===void 0)return;let t=r.shareScope||"default",s=r.shareKey||e,u=T(t),a=Object.hasOwn(u,s)?u[s]:void 0;if(a&&Object.keys(a).length>0){try{let g=A(e,r);if(g&&g.value===void 0){if(g.version===o)g.value=n,g.loaded=!0;else if(r.singleton&&!g.pendingGet){D(t,s,o,()=>Promise.resolve(n),{from:"fulgurjs:local-fallback",loaded:!0});let p=u[s][o];p.value=n,p.loaded=!0}}}catch{}return}D(t,s,o,()=>Promise.resolve(n),{from:"fulgurjs:local-fallback",loaded:!0});let y=u[s]?.[o];y&&(y.value=n)}async function Y(e,r={}){let n=r.shareScope||"default",o=r.shareKey||e,t=T(n)[o]||{},s=S(e,r),u=$.resolveShare?m.get(s):void 0,a=u||A(e,r);if(!a){if(r.fallback){let i=await r.fallback();return W(e,r,i),i}let p=new E(R.SHARE_NOT_AVAILABLE,`\u73B0\u8C61\uFF1A\u65E0\u6CD5\u52A0\u8F7D\u5171\u4EAB\u4F9D\u8D56 "${o}"\u3002
18
+ \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:t,error:i}),i}return}return u[p]}function Q(e,r,n){let o=r.localVersion;if(!o||n===void 0)return;let t=r.shareScope||"default",s=r.shareKey||e,u=L(t),a=Object.hasOwn(u,s)?u[s]:void 0;if(a&&Object.keys(a).length>0){try{let g=I(e,r);if(g&&g.value===void 0){if(g.version===o)g.value=n,g.loaded=!0;else if(r.singleton&&!g.pendingGet){H(t,s,o,()=>Promise.resolve(n),{from:"fulgurjs:local-fallback",loaded:!0});let p=u[s][o];p.value=n,p.loaded=!0}}}catch{}return}H(t,s,o,()=>Promise.resolve(n),{from:"fulgurjs:local-fallback",loaded:!0});let y=u[s]?.[o];y&&(y.value=n)}async function ee(e,r={}){let n=r.shareScope||"default",o=r.shareKey||e,t=L(n)[o]||{},s=S(e,r),u=_.resolveShare?m.get(s):void 0,a=u||I(e,r);if(!a){if(r.fallback){let i=await r.fallback();return Q(e,r,i),i}let p=new E(R.SHARE_NOT_AVAILABLE,`\u73B0\u8C61\uFF1A\u65E0\u6CD5\u52A0\u8F7D\u5171\u4EAB\u4F9D\u8D56 "${o}"\u3002
19
19
  \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
20
- \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:o,requiredVersion:r.requiredVersion});throw v({remote:o,error:p}),p}if($.resolveShare&&!u){let p=await $.resolveShare({shareKey:o,shareScope:n,requiredVersion:r.requiredVersion,picked:a,available:Object.values(t)});p&&(a=p),m.set(s,a)}if(a.value!==void 0)return m.set(S(e,r),a),a.value;if(a.loaded=!0,!a.pendingGet)try{a.pendingGet=a.get()}catch(p){a.pendingGet=Promise.reject(p)}let y=a.pendingGet,g;try{g=await y}catch(p){if(a.value!==void 0)return m.set(S(e,r),a),a.value;throw a.loaded=!1,m.get(s)===a&&m.delete(s),p}finally{a.pendingGet===y&&(a.pendingGet=void 0)}return a.value===void 0&&(a.value=g),m.set(S(e,r),a),a.value}function he(e,r={}){return $.resolveShare?m.get(S(e,r))?.value:A(e,r,!0)?.value}function ye(e,r,n,o){W(e,{...r,localVersion:n},o)}function Se(e,r){let n=r.shareScope||"default",o=r.shareKey||e;if($.resolveShare){let s=S(e,r),u=m.get(s);if(u&&u.value!==void 0)return{kind:"ready",value:u.value};let a=u||$.resolveShare({shareKey:o,shareScope:n,requiredVersion:r.requiredVersion,picked:A(e,r),available:Object.values(T(n)[o]||{})});if(a&&typeof a.then=="function")throw Promise.resolve(a).catch(()=>{}),new E(R.SHARE_NOT_AVAILABLE,`\u73B0\u8C61\uFF1AresolveShare \u5BF9\u5171\u4EAB "${o}" \u8FD4\u56DE\u4E86 Promise\uFF0C\u4F46\u8BE5\u5171\u4EAB\u6B63\u88AB\u540C\u6B65\u9759\u6001\u5BFC\u5165\u6D88\u8D39\uFF08Vite 8 \u540C\u6B65\u534F\u5546\u95E8\u9762\uFF09\u3002
20
+ \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:o,requiredVersion:r.requiredVersion});throw v({remote:o,error:p}),p}if(_.resolveShare&&!u){let p=await _.resolveShare({shareKey:o,shareScope:n,requiredVersion:r.requiredVersion,picked:a,available:Object.values(t)});p&&(a=p),m.set(s,a)}if(a.value!==void 0)return m.set(S(e,r),a),a.value;if(a.loaded=!0,!a.pendingGet)try{a.pendingGet=a.get()}catch(p){a.pendingGet=Promise.reject(p)}let y=a.pendingGet,g;try{g=await y}catch(p){if(a.value!==void 0)return m.set(S(e,r),a),a.value;throw a.loaded=!1,m.get(s)===a&&m.delete(s),p}finally{a.pendingGet===y&&(a.pendingGet=void 0)}return a.value===void 0&&(a.value=g),m.set(S(e,r),a),a.value}function Ee(e,r={}){return _.resolveShare?m.get(S(e,r))?.value:I(e,r,!0)?.value}function Re(e,r,n,o){Q(e,{...r,localVersion:n},o)}function we(e,r){let n=r.shareScope||"default",o=r.shareKey||e;if(_.resolveShare){let s=S(e,r),u=m.get(s);if(u&&u.value!==void 0)return{kind:"ready",value:u.value};let a=u||_.resolveShare({shareKey:o,shareScope:n,requiredVersion:r.requiredVersion,picked:I(e,r),available:Object.values(L(n)[o]||{})});if(a&&typeof a.then=="function")throw Promise.resolve(a).catch(()=>{}),new E(R.SHARE_NOT_AVAILABLE,`\u73B0\u8C61\uFF1AresolveShare \u5BF9\u5171\u4EAB "${o}" \u8FD4\u56DE\u4E86 Promise\uFF0C\u4F46\u8BE5\u5171\u4EAB\u6B63\u88AB\u540C\u6B65\u9759\u6001\u5BFC\u5165\u6D88\u8D39\uFF08Vite 8 \u540C\u6B65\u534F\u5546\u95E8\u9762\uFF09\u3002
21
21
  \u539F\u56E0\uFF1A\u6A21\u5757\u6C42\u503C\u671F\u65E0\u6CD5\u7B49\u5F85\u5F02\u6B65\u51B3\u7B56\uFF1B\u9759\u6001\u5BFC\u5165\u4E0D\u80FD\u9759\u9ED8\u5FFD\u7565 hook \u51B3\u7B56\u3002
22
22
  \u4FEE\u6CD5\uFF1AVite 8 HTML \u5165\u53E3\u4F1A\u5148\u5B8C\u6210\u5F02\u6B65\u534F\u5546\uFF1B\u5176\u4ED6\u5165\u53E3\u8BF7\u5148\u52A8\u6001 loadShare \u5EFA\u7ACB\u5FEB\u7167\uFF0C\u518D\u5BFC\u5165\u6D88\u8D39\u8005\uFF0C\u6216\u8BA9\u8BE5\u952E\u540C\u6B65\u8FD4\u56DE picked\u3002`,{shareKey:o,requiredVersion:r.requiredVersion,syncUnsupported:!0});let y=a;if(y){if(y.value!==void 0)return m.set(S(e,r),y),{kind:"ready",value:y.value};if(y.version!==void 0&&y.version===r.localVersion)return{kind:"local"};throw new E(R.SHARE_NOT_AVAILABLE,`\u73B0\u8C61\uFF1AresolveShare \u4E3A "${o}" \u9009\u62E9\u4E86\u672A\u5C31\u7EEA\u7684 ${y.version??"\u6761\u76EE"}\u3002
23
23
  \u539F\u56E0\uFF1A\u540C\u6B65\u6D88\u8D39\u4E0D\u80FD\u7B49\u5F85\u52A0\u8F7D\u3002
24
- \u4FEE\u6CD5\uFF1A\u5148\u52A8\u6001 loadShare \u518D\u5BFC\u5165\u6D88\u8D39\u8005\uFF0C\u6216\u9009\u62E9\u5DF2\u5C31\u7EEA\u5B9E\u4F8B/\u672C\u5730\u7248\u672C ${r.localVersion??"\u672A\u58F0\u660E"}\u3002`,{shareKey:o,requiredVersion:r.requiredVersion,syncUnsupported:!0})}}let t=A(e,r);if(!t)return{kind:"local"};if(t.value!==void 0)return{kind:"ready",value:t.value};if(t.version!==void 0&&t.version===r.localVersion)return{kind:"local"};if(r.singleton||r.strictVersion&&r.requiredVersion&&(!r.localVersion||!j(r.localVersion,r.requiredVersion))){if(r.strictVersion||t.pendingGet)throw new E(R.SHARE_NOT_AVAILABLE,`\u73B0\u8C61\uFF1A\u5171\u4EAB "${o}" \u9009\u4E2D\u4E86 ${t.from} \u63D0\u4F9B\u7684 ${t.version}\uFF08\u5C1A\u672A\u52A0\u8F7D\uFF09\uFF0C\u540C\u6B65\u9759\u6001\u5BFC\u5165\u65E0\u6CD5\u7B49\u5F85\u5176\u5B9E\u4F8B\u5C31\u7EEA\u3002
24
+ \u4FEE\u6CD5\uFF1A\u5148\u52A8\u6001 loadShare \u518D\u5BFC\u5165\u6D88\u8D39\u8005\uFF0C\u6216\u9009\u62E9\u5DF2\u5C31\u7EEA\u5B9E\u4F8B/\u672C\u5730\u7248\u672C ${r.localVersion??"\u672A\u58F0\u660E"}\u3002`,{shareKey:o,requiredVersion:r.requiredVersion,syncUnsupported:!0})}}let t=I(e,r);if(!t)return{kind:"local"};if(t.value!==void 0)return{kind:"ready",value:t.value};if(t.version!==void 0&&t.version===r.localVersion)return{kind:"local"};if(r.singleton||r.strictVersion&&r.requiredVersion&&(!r.localVersion||!U(r.localVersion,r.requiredVersion))){if(r.strictVersion||t.pendingGet)throw new E(R.SHARE_NOT_AVAILABLE,`\u73B0\u8C61\uFF1A\u5171\u4EAB "${o}" \u9009\u4E2D\u4E86 ${t.from} \u63D0\u4F9B\u7684 ${t.version}\uFF08\u5C1A\u672A\u52A0\u8F7D\uFF09\uFF0C\u540C\u6B65\u9759\u6001\u5BFC\u5165\u65E0\u6CD5\u7B49\u5F85\u5176\u5B9E\u4F8B\u5C31\u7EEA\u3002
25
25
  \u539F\u56E0\uFF1A\u4E0D\u80FD\u6539\u7528\u4E0D\u517C\u5BB9\u7684\u672C\u5730\u526F\u672C\u6216\u5206\u88C2\u5355\u4F8B\u3002
26
- \u4FEE\u6CD5\uFF1A\u8BA9\u8BE5\u5171\u4EAB\u7684\u9996\u6B21\u6D88\u8D39\u5148\u7ECF\u4E00\u6B21\u52A8\u6001 loadShare \u5B8C\u6210\u52A0\u8F7D\uFF0C\u6216\u5C06\u672C\u5E94\u7528\u7248\u672C\u4E0E\u4F5C\u7528\u57DF\u63D0\u4F9B\u7248\u672C\u5BF9\u9F50\u3002`,{shareKey:o,requiredVersion:r.requiredVersion,syncUnsupported:!0});let s=`${n}|${o}|${t.version}|${r.localVersion}`;return l.has(s)||(l.add(s),console.warn(`[fulgurjs:MFU-010] \u5171\u4EAB\u5355\u4F8B "${o}"\uFF1A\u4F5C\u7528\u57DF\u4E2D ${t.from} \u63D0\u4F9B\u7684 ${t.version} \u5C1A\u672A\u52A0\u8F7D\uFF0C\u9996\u4E2A\u6D88\u8D39\u8005\u4EE5\u672C\u5730\u7248\u672C ${r.localVersion??""} \u63A5\u7BA1\uFF08\u540E\u7EED\u6D88\u8D39\u8005\u6309\u5DF2\u52A0\u8F7D\u4F18\u5148\u6536\u655B\u5230\u8BE5\u5B9E\u4F8B\uFF09\u3002`)),{kind:"local"}}return console.warn(`[fulgurjs] \u5171\u4EAB "${o}"\uFF1A\u975E\u5355\u4F8B\u540C\u6B65\u6D88\u8D39\u4F7F\u7528\u672C\u5730 ${r.localVersion??""}\uFF0C\u8FDC\u7A0B ${t.version} \u5C1A\u672A\u5C31\u7EEA\u3002`),{kind:"local"}}async function Ee(e){if($.resolveShare){for(let{name:r,opts:n}of e){let o=S(r,n);if(m.has(o))continue;let t=A(r,n),s=await $.resolveShare({shareKey:n.shareKey||r,shareScope:n.shareScope||"default",requiredVersion:n.requiredVersion,picked:t,available:Object.values(T(n.shareScope||"default")[n.shareKey||r]||{})})||t;s&&m.set(o,s)}for(let{name:r,opts:n}of e)await Y(r,n)}}function z(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((o,t)=>{let s=setTimeout(()=>t(new Error(`\u7B49\u5F85\u8D85\u8FC7 ${r} \u6BEB\u79D2\uFF1A${n}`)),r);e.then(u=>{clearTimeout(s),o(u)},u=>{clearTimeout(s),t(u)})})}let Re=e=>new Promise(r=>setTimeout(r,e)),Q=new Set;function K(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){let o=`${r.name}\u2194${e.name}`;Q.has(o)||(Q.add(o),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 ee(e,r){let n=r.entryFailCounts.get(e)??0,o=n>0?`${e}${e.includes("?")?"&":"?"}fulgurjs_retry=${n}`:e,t=r.entryInflight.get(e),s=t??import(o);return t||(r.entryInflight.set(e,s),s.catch(()=>{r.entryInflight.delete(e),r.entryFailCounts.set(e,(r.entryFailCounts.get(e)??0)+1)})),Z(s,r.timeout??G,`\u52A0\u8F7D\u8FDC\u7A0B\u5165\u53E3 ${z(e)}`)}async function re(e,r){let n=e.shareScope||"default";if(e.container){let s=N.get(e.container);if(s&&s!==n)throw new E(R.CONTAINER_REINIT_CONFLICT,`\u8FDC\u7A0B\u5BB9\u5668 "${e.name}" \u5DF2\u4F7F\u7528\u5171\u4EAB\u4F5C\u7528\u57DF "${s}" \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 o=e.breakerState;if(o.openUntil>Date.now()){let s=new E(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(o.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,stage:"container"});throw v({remote:e.name,error:s}),s}e.state="loading",e.debug.status="loading";let t=(async()=>{let s=[];if(e.promise)s.push(async()=>{let i=await Z(e.promise(),e.timeout??G,`\u89E3\u6790\u52A8\u6001\u8FDC\u7A0B\u5E94\u7528 "${e.name}"`),h=typeof i=="string"?await ee(i,e):i;return K(h,e),h});else for(let i of[e.entry,...e.fallback??[]])s.push(async()=>{let h=await ee(i,e);return K(h,e),h});let u,a,y=!1,g=r?.retries??e.retries??se;for(let i of s){for(let h=0;h<=g;h++){let O=performance.now();try{u=await i(),e.lastLoadMs=Math.round(performance.now()-O),e.debug.lastLoadMs=e.lastLoadMs,y=!0;break}catch(_){if(a=_,_?.code)throw _;h<g&&await Re(Math.min(Ce,200*2**h)*(1-Fe*(1-2*Math.random())))}}if(y)break}if(!y||!u){let i=z(e.entry),h=[];throw/^https?:\/\//.test(e.entry)&&typeof location<"u"?(h.push(`1. \u5728\u6D4F\u89C8\u5668\u6253\u5F00 ${i}\uFF0C\u786E\u8BA4\u8FDC\u7A0B\u5F00\u53D1\u670D\u52A1\u5DF2\u542F\u52A8\uFF0C\u5E76\u8FD4\u56DE JS \u800C\u975E HTML\u3002`),h.push("2. \u6838\u5BF9 federation({ remotes }) \u4E2D\u7684\u5730\u5740\uFF1B\u5F00\u53D1\u548C\u751F\u4EA7\u5730\u5740\u53EF\u4EE5\u4E0D\u540C\u3002"),h.push("3. \u82E5\u8DE8\u57DF\uFF0C\u68C0\u67E5\u8FDC\u7A0B\u5F00\u53D1\u670D\u52A1\u7684 server.cors \u914D\u7F6E\u3002")):(h.push(`1. \u5728\u6D4F\u89C8\u5668\u6253\u5F00 ${i}\uFF0C\u786E\u8BA4\u8FDC\u7A0B\u5E94\u7528\u5DF2\u90E8\u7F72\uFF0C\u4E14\u5165\u53E3\u8FD4\u56DE JS\u3002`),h.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 E(R.REMOTE_LOAD_FAILED,`\u73B0\u8C61\uFF1A\u65E0\u6CD5\u4ECE ${i} \u52A0\u8F7D\u8FDC\u7A0B\u5E94\u7528 "${e.name}"\u3002
27
- \u539F\u56E0\uFF1A${String(a?.message??a)}
26
+ \u4FEE\u6CD5\uFF1A\u8BA9\u8BE5\u5171\u4EAB\u7684\u9996\u6B21\u6D88\u8D39\u5148\u7ECF\u4E00\u6B21\u52A8\u6001 loadShare \u5B8C\u6210\u52A0\u8F7D\uFF0C\u6216\u5C06\u672C\u5E94\u7528\u7248\u672C\u4E0E\u4F5C\u7528\u57DF\u63D0\u4F9B\u7248\u672C\u5BF9\u9F50\u3002`,{shareKey:o,requiredVersion:r.requiredVersion,syncUnsupported:!0});let s=`${n}|${o}|${t.version}|${r.localVersion}`;return l.has(s)||(l.add(s),console.warn(`[fulgurjs:MFU-010] \u5171\u4EAB\u5355\u4F8B "${o}"\uFF1A\u4F5C\u7528\u57DF\u4E2D ${t.from} \u63D0\u4F9B\u7684 ${t.version} \u5C1A\u672A\u52A0\u8F7D\uFF0C\u9996\u4E2A\u6D88\u8D39\u8005\u4EE5\u672C\u5730\u7248\u672C ${r.localVersion??""} \u63A5\u7BA1\uFF08\u540E\u7EED\u6D88\u8D39\u8005\u6309\u5DF2\u52A0\u8F7D\u4F18\u5148\u6536\u655B\u5230\u8BE5\u5B9E\u4F8B\uFF09\u3002`)),{kind:"local"}}return console.warn(`[fulgurjs] \u5171\u4EAB "${o}"\uFF1A\u975E\u5355\u4F8B\u540C\u6B65\u6D88\u8D39\u4F7F\u7528\u672C\u5730 ${r.localVersion??""}\uFF0C\u8FDC\u7A0B ${t.version} \u5C1A\u672A\u5C31\u7EEA\u3002`),{kind:"local"}}async function be(e){if(_.resolveShare){for(let{name:r,opts:n}of e){let o=S(r,n);if(m.has(o))continue;let t=I(r,n),s=await _.resolveShare({shareKey:n.shareKey||r,shareScope:n.shareScope||"default",requiredVersion:n.requiredVersion,picked:t,available:Object.values(L(n.shareScope||"default")[n.shareKey||r]||{})})||t;s&&m.set(o,s)}for(let{name:r,opts:n}of e)await ee(r,n)}}function j(e=""){return F(e).split(/[?#]/,1)[0]}function re(e,r,n){return new Promise((o,t)=>{let s=setTimeout(()=>t(new Error(`\u7B49\u5F85\u8D85\u8FC7 ${r} \u6BEB\u79D2\uFF1A${n}`)),r);e.then(u=>{clearTimeout(s),o(u)},u=>{clearTimeout(s),t(u)})})}let ve=e=>new Promise(r=>setTimeout(r,e)),ne=new Set;function G(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){let o=`${r.name}\u2194${e.name}`;ne.has(o)||(ne.add(o),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 te(e,r){let n=r.entryFailCounts.get(e)??0,o=n>0?`${e}${e.includes("?")?"&":"?"}fulgurjs_retry=${n}`:e,t=r.entryInflight.get(e),s=t??import(o);return t||(r.entryInflight.set(e,s),s.catch(()=>{r.entryInflight.delete(e),r.entryFailCounts.set(e,(r.entryFailCounts.get(e)??0)+1)})),re(s,r.timeout??J,`\u52A0\u8F7D\u8FDC\u7A0B\u5165\u53E3 ${j(e)}`)}async function oe(e,r){let n=e.shareScope||"default";if(e.container){let s=V.get(e.container);if(s&&s!==n)throw new E(R.CONTAINER_REINIT_CONFLICT,`\u8FDC\u7A0B\u5BB9\u5668 "${e.name}" \u5DF2\u4F7F\u7528\u5171\u4EAB\u4F5C\u7528\u57DF "${s}" \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 o=e.breakerState;if(o.openUntil>Date.now()){let s=new E(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(o.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,stage:"container"});throw v({remote:e.name,error:s}),s}e.state="loading",e.debug.status="loading";let t=(async()=>{let s=[];if(e.promise)s.push(async()=>{let i=await re(e.promise(),e.timeout??J,`\u89E3\u6790\u52A8\u6001\u8FDC\u7A0B\u5E94\u7528 "${e.name}"`),h=typeof i=="string"?await te(i,e):i;return G(h,e),h});else for(let i of[e.entry,...e.fallback??[]])s.push(async()=>{let h=await te(i,e);return G(h,e),h});let u,a,y=!1,g=r?.retries??e.retries??ce;for(let i of s){for(let h=0;h<=g;h++){let O=performance.now();try{u=await i(),e.lastLoadMs=Math.round(performance.now()-O),e.debug.lastLoadMs=e.lastLoadMs,y=!0;break}catch($){if(a=$,$?.code)throw $;h<g&&await ve(Math.min(De,200*2**h)*(1-Ke*(1-2*Math.random())))}}if(y)break}if(!y||!u){let i=j(e.entry),h=[];throw/^https?:\/\//.test(e.entry)&&typeof location<"u"?(h.push(`1. \u5728\u6D4F\u89C8\u5668\u6253\u5F00 ${i}\uFF0C\u786E\u8BA4\u8FDC\u7A0B\u5F00\u53D1\u670D\u52A1\u5DF2\u542F\u52A8\uFF0C\u5E76\u8FD4\u56DE JS \u800C\u975E HTML\u3002`),h.push("2. \u6838\u5BF9 federation({ remotes }) \u4E2D\u7684\u5730\u5740\uFF1B\u5F00\u53D1\u548C\u751F\u4EA7\u5730\u5740\u53EF\u4EE5\u4E0D\u540C\u3002"),h.push("3. \u82E5\u8DE8\u57DF\uFF0C\u68C0\u67E5\u8FDC\u7A0B\u5F00\u53D1\u670D\u52A1\u7684 server.cors \u914D\u7F6E\u3002")):(h.push(`1. \u5728\u6D4F\u89C8\u5668\u6253\u5F00 ${i}\uFF0C\u786E\u8BA4\u8FDC\u7A0B\u5E94\u7528\u5DF2\u90E8\u7F72\uFF0C\u4E14\u5165\u53E3\u8FD4\u56DE JS\u3002`),h.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 E(R.REMOTE_LOAD_FAILED,`\u73B0\u8C61\uFF1A\u65E0\u6CD5\u4ECE ${i} \u52A0\u8F7D\u8FDC\u7A0B\u5E94\u7528 "${e.name}"\u3002
27
+ \u539F\u56E0\uFF1A${M(a)}
28
28
  \u4FEE\u6CD5\uFF1A
29
29
  ${h.join(`
30
- `)}`,{remote:e.name,stage:"container"},{cause:a})}K(u,e);let p=N.get(u);if(p&&p!==n)throw new E(R.CONTAINER_REINIT_CONFLICT,`\u8FDC\u7A0B\u5BB9\u5668 "${e.name}" \u5DF2\u4F7F\u7528\u5171\u4EAB\u4F5C\u7528\u57DF "${p}" \u521D\u59CB\u5316\uFF0C\u4E0D\u80FD\u518D\u4EE5 "${n}" \u521D\u59CB\u5316\u3002\u8BF7\u7EDF\u4E00 shareScope \u914D\u7F6E\u3002`);return typeof u.init=="function"&&await u.init(c),N.set(u,n),e.container=u,e.state="loaded",e.debug.status="loaded",o.fails=0,u})();e.containerPromise=t;try{return await t}catch(s){if(e.containerPromise=void 0,e.state="failed",e.debug.status="failed",e.debug.error=String(s?.message??s),o.fails+=1,o.fails>=e.breakerThreshold&&(o.openUntil=Date.now()+e.breakerResetMs,o.fails=0),s instanceof E)throw v({remote:e.name,error:s}),s;if(s?.code)throw v({remote:e.name,error:s}),s;let u=new E(R.REMOTE_LOAD_FAILED,`\u8FDC\u7A0B\u5E94\u7528 "${e.name}" \u52A0\u8F7D\u5931\u8D25\u3002\u5E95\u5C42\u539F\u56E0\uFF1A${String(s?.message??s)}\u3002\u8BF7\u68C0\u67E5\u8FDC\u7A0B\u5165\u53E3\u3001\u7F51\u7EDC\u53CA\u5171\u4EAB\u4F9D\u8D56\u3002`,{remote:e.name,stage:"container"},{cause:s});throw v({remote:e.name,error:u}),u}}function q(e){let r=e.indexOf("/");return r===-1?{remote:e,module:""}:{remote:e.slice(0,r),module:ne(e.slice(r+1))}}function ne(e){return e?e.startsWith(".")?e:`./${e}`:""}async function we(e,r){let{remote:n,module:o}=q(e);if(o&&F===n)throw new E(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
30
+ `)}`,{remote:e.name,stage:"container"},{cause:a})}G(u,e);let p=V.get(u);if(p&&p!==n)throw new E(R.CONTAINER_REINIT_CONFLICT,`\u8FDC\u7A0B\u5BB9\u5668 "${e.name}" \u5DF2\u4F7F\u7528\u5171\u4EAB\u4F5C\u7528\u57DF "${p}" \u521D\u59CB\u5316\uFF0C\u4E0D\u80FD\u518D\u4EE5 "${n}" \u521D\u59CB\u5316\u3002\u8BF7\u7EDF\u4E00 shareScope \u914D\u7F6E\u3002`);return typeof u.init=="function"&&await u.init(c),V.set(u,n),e.container=u,e.state="loaded",e.debug.status="loaded",o.fails=0,u})();e.containerPromise=t;try{return await t}catch(s){if(e.containerPromise=void 0,e.state="failed",e.debug.status="failed",e.debug.error=M(s),o.fails+=1,o.fails>=e.breakerThreshold&&(o.openUntil=Date.now()+e.breakerResetMs,o.fails=0),s instanceof E)throw v({remote:e.name,error:s}),s;if(s?.code)throw v({remote:e.name,error:s}),s;let u=new E(R.REMOTE_LOAD_FAILED,`\u8FDC\u7A0B\u5E94\u7528 "${e.name}" \u52A0\u8F7D\u5931\u8D25\u3002\u5E95\u5C42\u539F\u56E0\uFF1A${M(s)}\u3002\u8BF7\u68C0\u67E5\u8FDC\u7A0B\u5165\u53E3\u3001\u7F51\u7EDC\u53CA\u5171\u4EAB\u4F9D\u8D56\u3002`,{remote:e.name,stage:"container"},{cause:s});throw v({remote:e.name,error:u}),u}}function X(e){let r=e.indexOf("/");return r===-1?{remote:e,module:""}:{remote:e.slice(0,r),module:se(e.slice(r+1))}}function se(e){return e?e.startsWith(".")?e:`./${e}`:""}async function Pe(e,r){let{remote:n,module:o}=X(e);if(o&&K===n)throw new E(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
31
31
  \u539F\u56E0\uFF1A\u521D\u59CB\u5316\u5C1A\u672A\u5B8C\u6210\uFF0C\u4E0D\u80FD\u7B49\u5F85\u81EA\u8EAB\u7684\u521D\u59CB\u5316\u7ED3\u679C\u3002
32
- \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{$.beforeLoadRemote?.({remote:n,module:o})}catch(i){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",i)}let t=d.get(n);if(!t)throw new E(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 s;try{let i=o&&t.manifestUrl?H(e):Promise.resolve();[s]=await Promise.all([re(t,{retries:r?.retries}),i])}catch(i){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`,i),v({remote:n,error:i}),await r.fallbackModule();throw i}if(!o)return s;await ue(t,s);let u=V(n).globalComponents,a=r?.consumerApp;if(u&&a&&typeof a.component=="function")for(let i of Object.keys(u))a.component(i,u[i]);let y=V(n).pageProviders;y&&y.length>0&&typeof a?.pageProviders=="function"&&a.pageProviders(y);let g=`${n}@${t.shareScope||"default"}#${o}`;b.has(g)||b.set(g,s.get(o).catch(i=>{if(b.delete(g),i instanceof E||i?.code)throw v({remote:n,error:i}),i;let h=new E(R.REMOTE_LOAD_FAILED,`\u65E0\u6CD5\u4ECE\u8FDC\u7A0B\u5E94\u7528 "${n}" \u52A0\u8F7D\u6A21\u5757 "${o}"\u3002\u5E95\u5C42\u539F\u56E0\uFF1A${String(i?.message??i)}\u3002\u8BF7\u6838\u5BF9 exposes \u952E\u548C\u8FDC\u7A0B\u6784\u5EFA\u4EA7\u7269\u3002`,{remote:n,module:o,stage:"expose"},{cause:i});throw v({remote:n,error:h}),h}));let p;try{p=await b.get(g)}catch(i){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`,i),v({remote:n,error:i}),await r.fallbackModule();throw i}try{$.afterLoadRemote?.({remote:n,module:o,module_ns:p})}catch(i){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",i)}if(p&&typeof p=="object"&&Object.keys(p).length===0){let i=new E(R.EMPTY_EXPORTS,`\u8FDC\u7A0B\u5E94\u7528 "${n}" \u7684\u6A21\u5757 "${o}" \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:o});v({remote:n,error:i}),console.error(i.message)}return p}function be(e){let r=d.get(e);if(!r)throw new E(R.REMOTE_UNKNOWN,`\u672A\u77E5\u8FDC\u7A0B\u5E94\u7528 "${e}"\u3002\u8BF7\u5148\u6CE8\u518C\u8BE5\u8FDC\u7A0B\u5E94\u7528\u3002`,{remote:e});return re(r)}async function H(e,r={}){let{remote:n,module:o}=q(e),t=d.get(n);if(!t)throw new E(R.REMOTE_UNKNOWN,`\u672A\u77E5\u8FDC\u7A0B\u5E94\u7528 "${n}"\u3002\u8BF7\u5148\u6CE8\u518C\u8BE5\u8FDC\u7A0B\u5E94\u7528\u3002`,{remote:n});let s=r.mode??"preload",u=(g,p)=>{if(g.sheet)return Promise.resolve();let i=L.get(g);if(i)return i;let h=new Promise(O=>{let _=()=>{g.removeEventListener("load",_),g.removeEventListener("error",M),O()},M=()=>{v({remote:n,error:new E(R.PRELOAD_FAILED,`\u8FDC\u7A0B\u5E94\u7528 "${n}" \u7684\u6837\u5F0F\u8D44\u6E90\u52A0\u8F7D\u5931\u8D25\uFF1A${p}\u3002\u8BF7\u68C0\u67E5\u6587\u4EF6\u662F\u5426\u5B58\u5728\u4EE5\u53CA\u8DE8\u57DF\u548C\u7F13\u5B58\u914D\u7F6E\u3002`,{remote:n})}),_()};g.addEventListener("load",_,{once:!0}),g.addEventListener("error",M,{once:!0}),g.sheet&&_()});return L.set(g,h),h},a=(g,p)=>{if(typeof document>"u")return Promise.resolve();let i=document.querySelector(`link[href="${g}"]`);if(i)return p==="style"&&s==="preload"?L.get(i)??Promise.resolve():Promise.resolve();let h=document.createElement("link");h.rel=p==="style"?"stylesheet":"modulepreload",h.href=g,s==="prefetch"&&(h.fetchPriority="low");let O=p==="style"?u(h,g):Promise.resolve();return document.head.appendChild(h),p==="style"&&s==="preload"?O:Promise.resolve()},y=g=>{let p=typeof document<"u"?document.baseURI:void 0,i=new URL(t.entry,p||"http://fulgurjs.invalid/");return!i.pathname.endsWith("/")&&!i.pathname.split("/").pop().includes(".")&&(i.pathname+="/"),new URL(g,i).href};try{if(t.manifestUrl){let g=P.get(t.manifestUrl);g||(g=fetch(t.manifestUrl,{cache:"no-cache",signal:AbortSignal.timeout(8e3)}).then(i=>i.ok?i.json():void 0),P.set(t.manifestUrl,g),g.then(i=>{i||P.delete(t.manifestUrl)},()=>P.delete(t.manifestUrl)));let p=await g;if(p){let i=p.schemaVersion;if(typeof i=="number"&&(!Number.isInteger(i)||i>1)){v({remote:n,error:new E(R.PRELOAD_FAILED,`\u8FDC\u7A0B\u5E94\u7528 "${n}" \u7684 manifest \u534F\u8BAE\u7248\u672C\u4E3A ${String(i)}\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 a(t.entry,"modulepreload");return}await a(t.entry,"modulepreload");let h=p.exposes,O=Array.isArray(h)?h.filter(k=>k&&typeof k=="object").map(k=>[String(k.name??""),k]):h&&typeof h=="object"?Object.entries(h):[],_=o?O.filter(([k,x])=>ne(String(x?.name??k))===o):O,M=[];for(let[,k]of _)if(typeof k?.file=="string"&&await a(y(k.file),"modulepreload"),Array.isArray(k?.css))for(let x of k.css){if(typeof x!="string")continue;let ve=a(y(x),"style");s==="preload"&&M.push(ve)}await Promise.all(M);return}}await a(t.entry,"modulepreload")}catch(g){v({remote:n,error:new E(R.PRELOAD_FAILED,`\u8FDC\u7A0B\u5E94\u7528 "${n}" \u9884\u52A0\u8F7D\u5931\u8D25\u3002\u5E95\u5C42\u539F\u56E0\uFF1A${String(g?.message??g)}\u3002\u8BF7\u68C0\u67E5 manifest \u548C\u8D44\u6E90\u5730\u5740\u3002`,{remote:n})})}}return typeof window>"u"||(window.__FULGURJS_SCOPE__=c,window.__FULGURJS_INFO__={get remotes(){let e={};for(let[r,n]of d)e[r]={...n.debug,entry:n.entry};return e},errors:[]}),{shareScopeMap:c,initSharing:fe,registerShare:D,registerRemotes:B,registerRemote:me,registerPlugins:ge,loadShare:Y,loadShareSync:Se,prepareShares:Ee,getLoadedShare:he,pinLoadedShare:ye,loadRemote:we,getContainer:be,preloadRemote:H,parseSpec:q,clearSessionState:de,reportRemoteError:e=>{v(e)}}}var ie=globalThis,w=ie.__FULGURJS_RUNTIME__??Ve();ie.__FULGURJS_RUNTIME__=w;try{Object.freeze(w)}catch{}var Be=oe;function We(){return w}var Ye=w.initSharing,ze=w.registerShare,Ze=w.registerRemotes,Qe=w.registerRemote,er=w.registerPlugins,rr=w.loadShare,nr=w.getLoadedShare,tr=w.prepareShares||(async c=>{for(let{name:d,opts:f}of c)await w.loadShare(d,f)}),or=w.loadShareSync,sr=w.pinLoadedShare,ir=w.loadRemote,ar=w.getContainer,cr=w.preloadRemote,lr=w.parseSpec,ur=w.clearSessionState,dr=w.shareScopeMap;function fr(c){if(c&&typeof c=="object"&&"default"in c){let d=c.default;return d!==void 0?d:c}return c}var pr=w;export{ur as clearSessionState,pr as default,ar as getContainer,nr as getLoadedShare,We as getRuntime,Ye as initSharing,ir as loadRemote,rr as loadShare,or as loadShareSync,lr as parseSpec,sr as pinLoadedShare,cr as preloadRemote,tr as prepareShares,er as registerPlugins,Qe as registerRemote,Ze as registerRemotes,ze as registerShare,w as runtime,dr as shareScopeMap,fr as unwrapDefault,Be as version};
32
+ \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{_.beforeLoadRemote?.({remote:n,module:o})}catch(i){W("beforeLoadRemote",i)}let t=d.get(n);if(!t)throw new E(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 s;try{let i=o&&t.manifestUrl?B(e):Promise.resolve();[s]=await Promise.all([oe(t,{retries:r?.retries}),i])}catch(i){if(r?.fallbackModule)return console.error(`[fulgurjs] \u8FDC\u7A0B\u6A21\u5757 "${e}" \u52A0\u8F7D\u5931\u8D25\uFF1B\u4F7F\u7528\u914D\u7F6E\u7684 fallbackModule\u3002\u6458\u8981\uFF1A`,M(i)),v({remote:n,error:i}),await r.fallbackModule();throw i}if(!o)return s;await pe(t,s);let u=q(n).globalComponents,a=r?.consumerApp;if(u&&a&&typeof a.component=="function")for(let i of Object.keys(u))a.component(i,u[i]);let y=q(n).pageProviders;y&&y.length>0&&typeof a?.pageProviders=="function"&&a.pageProviders(y);let g=`${n}@${t.shareScope||"default"}#${o}`;b.has(g)||b.set(g,s.get(o).catch(i=>{if(b.delete(g),i instanceof E||i?.code)throw v({remote:n,error:i}),i;let h=new E(R.REMOTE_LOAD_FAILED,`\u65E0\u6CD5\u4ECE\u8FDC\u7A0B\u5E94\u7528 "${n}" \u52A0\u8F7D\u6A21\u5757 "${o}"\u3002\u5E95\u5C42\u539F\u56E0\uFF1A${M(i)}\u3002\u8BF7\u6838\u5BF9 exposes \u952E\u548C\u8FDC\u7A0B\u6784\u5EFA\u4EA7\u7269\u3002`,{remote:n,module:o,stage:"expose"},{cause:i});throw v({remote:n,error:h}),h}));let p;try{p=await b.get(g)}catch(i){if(r?.fallbackModule)return console.error(`[fulgurjs] \u8FDC\u7A0B\u6A21\u5757 "${e}" \u52A0\u8F7D\u5931\u8D25\uFF1B\u4F7F\u7528\u914D\u7F6E\u7684 fallbackModule\u3002\u6458\u8981\uFF1A`,M(i)),v({remote:n,error:i}),await r.fallbackModule();throw i}try{_.afterLoadRemote?.({remote:n,module:o,module_ns:p})}catch(i){W("afterLoadRemote",i)}if(p&&typeof p=="object"&&Object.keys(p).length===0){let i=new E(R.EMPTY_EXPORTS,`\u8FDC\u7A0B\u5E94\u7528 "${n}" \u7684\u6A21\u5757 "${o}" \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:o});v({remote:n,error:i}),console.error(i.message)}return p}function $e(e){let r=d.get(e);if(!r)throw new E(R.REMOTE_UNKNOWN,`\u672A\u77E5\u8FDC\u7A0B\u5E94\u7528 "${e}"\u3002\u8BF7\u5148\u6CE8\u518C\u8BE5\u8FDC\u7A0B\u5E94\u7528\u3002`,{remote:e});return oe(r)}async function B(e,r={}){let{remote:n,module:o}=X(e),t=d.get(n);if(!t)throw new E(R.REMOTE_UNKNOWN,`\u672A\u77E5\u8FDC\u7A0B\u5E94\u7528 "${n}"\u3002\u8BF7\u5148\u6CE8\u518C\u8BE5\u8FDC\u7A0B\u5E94\u7528\u3002`,{remote:n});let s=r.mode??"preload",u=(g,p)=>{if(g.sheet)return Promise.resolve();let i=A.get(g);if(i)return i;let h=new Promise(O=>{let $=()=>{g.removeEventListener("load",$),g.removeEventListener("error",T),O()},T=()=>{v({remote:n,error:new E(R.PRELOAD_FAILED,`\u8FDC\u7A0B\u5E94\u7528 "${n}" \u7684\u6837\u5F0F\u8D44\u6E90\u52A0\u8F7D\u5931\u8D25\uFF1A${p}\u3002\u8BF7\u68C0\u67E5\u6587\u4EF6\u662F\u5426\u5B58\u5728\u4EE5\u53CA\u8DE8\u57DF\u548C\u7F13\u5B58\u914D\u7F6E\u3002`,{remote:n})}),$()};g.addEventListener("load",$,{once:!0}),g.addEventListener("error",T,{once:!0}),g.sheet&&$()});return A.set(g,h),h},a=(g,p)=>{if(typeof document>"u")return Promise.resolve();let i=document.querySelector(`link[href="${g}"]`);if(i)return p==="style"&&s==="preload"?A.get(i)??Promise.resolve():Promise.resolve();let h=document.createElement("link");h.rel=p==="style"?"stylesheet":"modulepreload",h.href=g,s==="prefetch"&&(h.fetchPriority="low");let O=p==="style"?u(h,g):Promise.resolve();return document.head.appendChild(h),p==="style"&&s==="preload"?O:Promise.resolve()},y=g=>{let p=typeof document<"u"?document.baseURI:void 0,i=new URL(t.entry,p||"http://fulgurjs.invalid/");return!i.pathname.endsWith("/")&&!i.pathname.split("/").pop().includes(".")&&(i.pathname+="/"),new URL(g,i).href};try{if(t.manifestUrl){let g=P.get(t.manifestUrl);g||(g=fetch(t.manifestUrl,{cache:"no-cache",signal:AbortSignal.timeout(8e3)}).then(i=>i.ok?i.json():void 0),P.set(t.manifestUrl,g),g.then(i=>{i||P.delete(t.manifestUrl)},()=>P.delete(t.manifestUrl)));let p=await g;if(p){let i=p.schemaVersion;if(typeof i=="number"&&(!Number.isInteger(i)||i>1)){v({remote:n,error:new E(R.PRELOAD_FAILED,`\u8FDC\u7A0B\u5E94\u7528 "${n}" \u7684 manifest \u534F\u8BAE\u7248\u672C\u4E3A ${String(i)}\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 a(t.entry,"modulepreload");return}await a(t.entry,"modulepreload");let h=p.exposes,O=Array.isArray(h)?h.filter(k=>k&&typeof k=="object").map(k=>[String(k.name??""),k]):h&&typeof h=="object"?Object.entries(h):[],$=o?O.filter(([k,N])=>se(String(N?.name??k))===o):O,T=[];for(let[,k]of $)if(typeof k?.file=="string"&&await a(y(k.file),"modulepreload"),Array.isArray(k?.css))for(let N of k.css){if(typeof N!="string")continue;let _e=a(y(N),"style");s==="preload"&&T.push(_e)}await Promise.all(T);return}}await a(t.entry,"modulepreload")}catch(g){v({remote:n,error:new E(R.PRELOAD_FAILED,`\u8FDC\u7A0B\u5E94\u7528 "${n}" \u9884\u52A0\u8F7D\u5931\u8D25\u3002\u5E95\u5C42\u539F\u56E0\uFF1A${M(g)}\u3002\u8BF7\u68C0\u67E5 manifest \u548C\u8D44\u6E90\u5730\u5740\u3002`,{remote:n})})}}return typeof window>"u"||(window.__FULGURJS_SCOPE__=c,window.__FULGURJS_INFO__={get remotes(){let e={};for(let[r,n]of d)e[r]={...n.debug,entry:j(n.entry)};return e},errors:[]}),{shareScopeMap:c,initSharing:ge,registerShare:H,registerRemotes:Z,registerRemote:ye,registerPlugins:Se,loadShare:ee,loadShareSync:we,prepareShares:be,getLoadedShare:Ee,pinLoadedShare:Re,loadRemote:Pe,getContainer:$e,preloadRemote:B,parseSpec:X,clearSessionState:me,reportRemoteError:e=>{v(e)}}}var le=globalThis,w=le.__FULGURJS_RUNTIME__??qe();le.__FULGURJS_RUNTIME__=w;try{Object.freeze(w)}catch{}var Ye=ae;function Ze(){return w}var Qe=w.initSharing,er=w.registerShare,rr=w.registerRemotes,nr=w.registerRemote,tr=w.registerPlugins,or=w.loadShare,sr=w.getLoadedShare,ir=w.prepareShares||(async c=>{for(let{name:d,opts:f}of c)await w.loadShare(d,f)}),ar=w.loadShareSync,cr=w.pinLoadedShare,lr=w.loadRemote,ur=w.getContainer,dr=w.preloadRemote,fr=w.parseSpec,pr=w.clearSessionState,mr=w.shareScopeMap;function gr(c){if(c&&typeof c=="object"&&"default"in c){let d=c.default;return d!==void 0?d:c}return c}var hr=w;export{pr as clearSessionState,hr as default,ur as getContainer,sr as getLoadedShare,Ze as getRuntime,Qe as initSharing,lr as loadRemote,or as loadShare,ar as loadShareSync,fr as parseSpec,cr as pinLoadedShare,dr as preloadRemote,ir as prepareShares,tr as registerPlugins,nr as registerRemote,rr as registerRemotes,er as registerShare,w as runtime,mr as shareScopeMap,gr as unwrapDefault,Ye as version};
@@ -27,6 +27,12 @@ module.exports = __toCommonJS(vue_adapter_exports);
27
27
  var import_vue = require("vue");
28
28
 
29
29
  // src/runtime/errors.ts
30
+ function diagnosticUrl(text) {
31
+ return text.replace(/(https?:\/\/)(?:[^\s/@]+@)?([^\s?#"'<>,。;))\]]+)(?:[?#][^\s"'<>,。;))\]]*)?/g, "$1$2");
32
+ }
33
+ function diagnosticMessage(error) {
34
+ return diagnosticUrl(String(error?.message ?? error)).replace(/\b(token|password|cookie|authorization)["']?\s*[:=]\s*["']?(?:Bearer\s+)?[^\s,;"'}]+/gi, "$1=[redacted]");
35
+ }
30
36
  var ErrorCodes = {
31
37
  /** 远程容器加载失败(网络/超时/重试耗尽/熔断) */
32
38
  REMOTE_LOAD_FAILED: "MFU-001",
@@ -58,7 +64,7 @@ var ErrorCodes = {
58
64
  SETUP_RECURSION: "MFU-014",
59
65
  /** 远程模块在组件消费边界导出的不是可渲染组件(适配器实测导出形态后报出) */
60
66
  COMPONENT_EXPORT_INVALID: "MFU-018",
61
- /** Vue 组件直渲染的渲染器与共享作用域实际收敛的 Vue 实例不一致(身份证据已证实) */
67
+ /** 当前编译 SFC 的 Vue 导入引用与消费方渲染器不一致(组件证据已证实) */
62
68
  VUE_RUNTIME_IDENTITY_MISMATCH: "MFU-019",
63
69
  /** 远程组件子树内部渲染错误(插件边界观测:setup/render/嵌套异步组件拒绝;原始异常保留在 cause) */
64
70
  REMOTE_RENDER_ERROR: "MFU-020"
@@ -349,19 +355,28 @@ function isVueRenderableComponent(inner) {
349
355
  const c = inner;
350
356
  return typeof c.render === "function" || typeof c.setup === "function" || typeof c.template === "string";
351
357
  }
352
- function vueRuntimeIdentityError(spec) {
353
- const sharedVue = globalThis.__FULGURJS_RUNTIME__?.getLoadedShare?.("vue");
354
- if (!sharedVue || typeof sharedVue.ref !== "function" || typeof sharedVue.version !== "string") return void 0;
355
- if (sharedVue.ref === import_vue.ref) return void 0;
358
+ function vueRuntimeIdentityError(spec, component) {
359
+ const bindings = { ref: import_vue.ref, openBlock: import_vue.openBlock, createVNode: import_vue.createVNode, createElementVNode: import_vue.createElementVNode, defineComponent: import_vue.defineComponent, h: import_vue.h };
360
+ const evidence = component[/* @__PURE__ */ Symbol.for("fulgurjs.vue-runtime")];
361
+ const key = evidence?.key;
362
+ if (!key || !Object.hasOwn(bindings, key) || typeof evidence?.value !== "function") return void 0;
363
+ if (bindings[key] === evidence.value) return void 0;
356
364
  return Object.assign(
357
365
  new Error(
358
- `\u73B0\u8C61\uFF1A\u6D88\u8D39\u65B9\u76F4\u6E32\u67D3\u8FDC\u7A0B\u7EC4\u4EF6 "${spec}" \u65F6\uFF0C\u68C0\u6D4B\u5230\u6E32\u67D3\u5668\u4F7F\u7528\u7684 Vue \u4E0E\u5171\u4EAB\u4F5C\u7528\u57DF\u5B9E\u9645\u6536\u655B\u7684 Vue \u4E0D\u662F\u540C\u4E00\u5B9E\u4F8B\uFF08\u6E32\u67D3\u94FE ${import_vue.version}\uFF0C\u5171\u4EAB\u5B9E\u4F8B ${sharedVue.version}\uFF1B\u7248\u672C\u53F7\u76F8\u540C\u4E5F\u4E0D\u4EE3\u8868\u5B9E\u4F8B\u76F8\u540C\uFF09\u3002
359
- \u6839\u56E0\uFF08\u5DF2\u8BC1\u5B9E\uFF09\uFF1A\u53CC\u65B9\u81F3\u5C11\u4E00\u65B9\u58F0\u660E\u4E86 shared.vue\uFF0C\u4F46\u6D88\u8D39\u65B9\u81EA\u8EAB\u7684 vue \u5BFC\u5165\u6CA1\u6709\u6536\u655B\u5230\u540C\u4E00\u5B9E\u4F8B\u2014\u2014\u5E38\u89C1\u4E8E\u6D88\u8D39\u65B9\u672A\u58F0\u660E shared.vue\u3001dev \u9884\u6784\u5EFA/optimizeDeps \u7ED5\u8FC7\u5171\u4EAB\u95E8\u9762\u3001\u6216 shareScope \u4E0D\u4E00\u81F4\u3002\u5B9E\u4F8B\u5206\u88C2\u65F6 inject/provide/Pinia/getCurrentInstance \u8DE8\u5B9E\u4F8B\u65AD\u94FE\uFF0C\u9875\u9762\u5E38\u8868\u73B0\u4E3A\u5916\u58F3\u5728\u3001\u5185\u90E8\u7A7A\u767D\u4E14\u65E0 pageerror\u3002
360
- \u4FEE\u6CD5\uFF1A\u2460 \u6D88\u8D39\u65B9\u4E0E\u8FDC\u7A0B\u90FD\u5728 federation({ shared }) \u58F0\u660E vue\uFF08singleton \u5EFA\u8BAE\u5F00\u542F\uFF09\u5E76\u4F7F\u7528\u540C\u4E00 shareScope\uFF1B\u2461 dev \u4E0B\u786E\u8BA4\u63D2\u4EF6\u7248\u672C\u4E00\u81F4\u3001\u672A\u7528 optimizeDeps \u628A vue \u9884\u6784\u5EFA\u6210\u7B2C\u4E8C\u4EFD\u526F\u672C\uFF1B\u2462 \u9700\u8981\u72EC\u7ACB Vue \u8FD0\u884C\u65F6\u7684\u5B8C\u6574\u5B50\u5E94\u7528\u4E0D\u8981\u7528 remoteComponent \u76F4\u6E32\u67D3\uFF0C\u6539\u7528\u5E94\u7528\u6865\u63A5\uFF08defineBridgeApp/createVueBridgeApp\uFF09\u3002\u6838\u5B9E\u624B\u6BB5\uFF1Awindow.__FULGURJS_SCOPE__.default.vue \u67E5\u770B\u5B9E\u9645\u6536\u655B\u6761\u76EE\u4E0E\u6765\u6E90\u3002`
366
+ `\u73B0\u8C61\uFF1A\u6D88\u8D39\u65B9\u76F4\u6E32\u67D3\u8FDC\u7A0B\u7EC4\u4EF6 "${spec}" \u65F6\uFF0C\u5F53\u524D\u7EC4\u4EF6\u5B9E\u9645\u5BFC\u5165\u7684 Vue ${key} \u4E0E\u6E32\u67D3\u5668\u4E0D\u662F\u540C\u4E00\u5F15\u7528\uFF08\u6E32\u67D3\u5668\u7248\u672C ${import_vue.version}\uFF09\u3002
367
+ \u6839\u56E0\uFF08\u5DF2\u8BC1\u5B9E\uFF09\uFF1A\u7F16\u8BD1\u540E\u7684\u5F53\u524D SFC \u5BFC\u5165\u5F15\u7528\u4E0E\u6D88\u8D39\u65B9\u6E32\u67D3\u5668\u4E0D\u4E00\u81F4\uFF1B\u6B64\u5224\u65AD\u4E0D\u4F7F\u7528\u9ED8\u8BA4\u5171\u4EAB\u4F5C\u7528\u57DF\uFF0C\u4E5F\u4E0D\u628A\u7248\u672C\u53F7\u76F8\u540C\u5F53\u4F5C\u5B9E\u4F8B\u76F8\u540C\u3002
368
+ \u4FEE\u6CD5\uFF1A\u6838\u5BF9\u8BE5\u7EC4\u4EF6\u4E0E\u6D88\u8D39\u65B9\u7684 shared.vue\u3001shareScope \u548C dev \u4F9D\u8D56\u89E3\u6790\uFF0C\u4F7F\u540C\u4E00\u6E32\u67D3\u94FE\u6536\u655B\u5230\u540C\u4E00 Vue\uFF1B\u9700\u8981\u72EC\u7ACB\u8FD0\u884C\u65F6\u7684\u5B8C\u6574\u5B50\u5E94\u7528\u5E94\u4F7F\u7528 defineBridgeApp/createVueBridgeApp\u3002\u7EC4\u4EF6\u8FD0\u884C\u65F6\u7684\u7248\u672C\u82E5\u672A\u53D6\u5F97\u53EF\u9760\u8BC1\u636E\uFF0C\u4E0D\u636E\u5171\u4EAB\u8868\u731C\u6D4B\u3002`
361
369
  ),
362
370
  {
363
371
  code: ErrorCodes.VUE_RUNTIME_IDENTITY_MISMATCH,
364
- details: { remote: spec.slice(0, spec.indexOf("/")) || spec, module: spec.slice(spec.indexOf("/") + 1) || void 0, rendererVueVersion: import_vue.version, sharedVueVersion: sharedVue.version }
372
+ details: {
373
+ remote: remoteNameOf(spec),
374
+ module: moduleNameOf(spec),
375
+ stage: "adapter",
376
+ rendererVueVersion: import_vue.version,
377
+ runtimeBinding: key,
378
+ evidenceSource: "compiled-sfc-import"
379
+ }
365
380
  }
366
381
  );
367
382
  }
@@ -407,7 +422,7 @@ var RemoteErrorPlaceholder = /* @__PURE__ */ (0, import_vue.defineComponent)({
407
422
  return () => {
408
423
  const err = props.error;
409
424
  const code = err?.code ?? "UNKNOWN";
410
- const message = err?.message ?? String(props.error ?? "unknown error");
425
+ const message = diagnosticMessage(err ?? props.error ?? "unknown error");
411
426
  const buttons = [
412
427
  props.retry ? (0, import_vue.h)("button", {
413
428
  key: "retry",
@@ -614,7 +629,7 @@ function createRemoteComponent(loadRemote) {
614
629
  reportRemoteObservation({ remote: remoteNameOf(spec), error: err });
615
630
  throw err;
616
631
  }
617
- const identity = vueRuntimeIdentityError(spec);
632
+ const identity = vueRuntimeIdentityError(spec, inner);
618
633
  if (identity) {
619
634
  reportRemoteObservation({ remote: remoteNameOf(spec), error: identity });
620
635
  throw identity;
@@ -664,7 +679,7 @@ function createHostPages(options, load) {
664
679
  reportRemoteObservation({ remote: remoteNameOf(spec), error: err });
665
680
  throw err;
666
681
  }
667
- const identity = vueRuntimeIdentityError(spec);
682
+ const identity = vueRuntimeIdentityError(spec, inner);
668
683
  if (identity) {
669
684
  reportRemoteObservation({ remote: remoteNameOf(spec), error: identity });
670
685
  throw identity;
@@ -9,14 +9,15 @@ import {
9
9
  reportRemoteObservation,
10
10
  resolvePageProviderEntries,
11
11
  shouldResetSessionCache
12
- } from "./chunk-2OHKAD6I.js";
12
+ } from "./chunk-FXG2TWSA.js";
13
13
  import "./chunk-TSXZ7TWA.js";
14
14
  import {
15
- ErrorCodes
16
- } from "./chunk-YHXQHZ3E.js";
15
+ ErrorCodes,
16
+ diagnosticMessage
17
+ } from "./chunk-NX3HRELG.js";
17
18
 
18
19
  // src/vue-adapter.ts
19
- import { defineAsyncComponent, defineComponent, getCurrentInstance, h, onErrorCaptured, ref, shallowRef, onActivated, onUnmounted, version as vueRuntimeVersion } from "vue";
20
+ import { defineAsyncComponent, defineComponent, getCurrentInstance, h, onErrorCaptured, ref, openBlock, createVNode, createElementVNode, shallowRef, onActivated, onUnmounted, version as vueRuntimeVersion } from "vue";
20
21
  function isVueRenderableComponent(inner) {
21
22
  if (!inner) return false;
22
23
  if (typeof inner === "function") return true;
@@ -24,19 +25,28 @@ function isVueRenderableComponent(inner) {
24
25
  const c = inner;
25
26
  return typeof c.render === "function" || typeof c.setup === "function" || typeof c.template === "string";
26
27
  }
27
- function vueRuntimeIdentityError(spec) {
28
- const sharedVue = globalThis.__FULGURJS_RUNTIME__?.getLoadedShare?.("vue");
29
- if (!sharedVue || typeof sharedVue.ref !== "function" || typeof sharedVue.version !== "string") return void 0;
30
- if (sharedVue.ref === ref) return void 0;
28
+ function vueRuntimeIdentityError(spec, component) {
29
+ const bindings = { ref, openBlock, createVNode, createElementVNode, defineComponent, h };
30
+ const evidence = component[/* @__PURE__ */ Symbol.for("fulgurjs.vue-runtime")];
31
+ const key = evidence?.key;
32
+ if (!key || !Object.hasOwn(bindings, key) || typeof evidence?.value !== "function") return void 0;
33
+ if (bindings[key] === evidence.value) return void 0;
31
34
  return Object.assign(
32
35
  new Error(
33
- `\u73B0\u8C61\uFF1A\u6D88\u8D39\u65B9\u76F4\u6E32\u67D3\u8FDC\u7A0B\u7EC4\u4EF6 "${spec}" \u65F6\uFF0C\u68C0\u6D4B\u5230\u6E32\u67D3\u5668\u4F7F\u7528\u7684 Vue \u4E0E\u5171\u4EAB\u4F5C\u7528\u57DF\u5B9E\u9645\u6536\u655B\u7684 Vue \u4E0D\u662F\u540C\u4E00\u5B9E\u4F8B\uFF08\u6E32\u67D3\u94FE ${vueRuntimeVersion}\uFF0C\u5171\u4EAB\u5B9E\u4F8B ${sharedVue.version}\uFF1B\u7248\u672C\u53F7\u76F8\u540C\u4E5F\u4E0D\u4EE3\u8868\u5B9E\u4F8B\u76F8\u540C\uFF09\u3002
34
- \u6839\u56E0\uFF08\u5DF2\u8BC1\u5B9E\uFF09\uFF1A\u53CC\u65B9\u81F3\u5C11\u4E00\u65B9\u58F0\u660E\u4E86 shared.vue\uFF0C\u4F46\u6D88\u8D39\u65B9\u81EA\u8EAB\u7684 vue \u5BFC\u5165\u6CA1\u6709\u6536\u655B\u5230\u540C\u4E00\u5B9E\u4F8B\u2014\u2014\u5E38\u89C1\u4E8E\u6D88\u8D39\u65B9\u672A\u58F0\u660E shared.vue\u3001dev \u9884\u6784\u5EFA/optimizeDeps \u7ED5\u8FC7\u5171\u4EAB\u95E8\u9762\u3001\u6216 shareScope \u4E0D\u4E00\u81F4\u3002\u5B9E\u4F8B\u5206\u88C2\u65F6 inject/provide/Pinia/getCurrentInstance \u8DE8\u5B9E\u4F8B\u65AD\u94FE\uFF0C\u9875\u9762\u5E38\u8868\u73B0\u4E3A\u5916\u58F3\u5728\u3001\u5185\u90E8\u7A7A\u767D\u4E14\u65E0 pageerror\u3002
35
- \u4FEE\u6CD5\uFF1A\u2460 \u6D88\u8D39\u65B9\u4E0E\u8FDC\u7A0B\u90FD\u5728 federation({ shared }) \u58F0\u660E vue\uFF08singleton \u5EFA\u8BAE\u5F00\u542F\uFF09\u5E76\u4F7F\u7528\u540C\u4E00 shareScope\uFF1B\u2461 dev \u4E0B\u786E\u8BA4\u63D2\u4EF6\u7248\u672C\u4E00\u81F4\u3001\u672A\u7528 optimizeDeps \u628A vue \u9884\u6784\u5EFA\u6210\u7B2C\u4E8C\u4EFD\u526F\u672C\uFF1B\u2462 \u9700\u8981\u72EC\u7ACB Vue \u8FD0\u884C\u65F6\u7684\u5B8C\u6574\u5B50\u5E94\u7528\u4E0D\u8981\u7528 remoteComponent \u76F4\u6E32\u67D3\uFF0C\u6539\u7528\u5E94\u7528\u6865\u63A5\uFF08defineBridgeApp/createVueBridgeApp\uFF09\u3002\u6838\u5B9E\u624B\u6BB5\uFF1Awindow.__FULGURJS_SCOPE__.default.vue \u67E5\u770B\u5B9E\u9645\u6536\u655B\u6761\u76EE\u4E0E\u6765\u6E90\u3002`
36
+ `\u73B0\u8C61\uFF1A\u6D88\u8D39\u65B9\u76F4\u6E32\u67D3\u8FDC\u7A0B\u7EC4\u4EF6 "${spec}" \u65F6\uFF0C\u5F53\u524D\u7EC4\u4EF6\u5B9E\u9645\u5BFC\u5165\u7684 Vue ${key} \u4E0E\u6E32\u67D3\u5668\u4E0D\u662F\u540C\u4E00\u5F15\u7528\uFF08\u6E32\u67D3\u5668\u7248\u672C ${vueRuntimeVersion}\uFF09\u3002
37
+ \u6839\u56E0\uFF08\u5DF2\u8BC1\u5B9E\uFF09\uFF1A\u7F16\u8BD1\u540E\u7684\u5F53\u524D SFC \u5BFC\u5165\u5F15\u7528\u4E0E\u6D88\u8D39\u65B9\u6E32\u67D3\u5668\u4E0D\u4E00\u81F4\uFF1B\u6B64\u5224\u65AD\u4E0D\u4F7F\u7528\u9ED8\u8BA4\u5171\u4EAB\u4F5C\u7528\u57DF\uFF0C\u4E5F\u4E0D\u628A\u7248\u672C\u53F7\u76F8\u540C\u5F53\u4F5C\u5B9E\u4F8B\u76F8\u540C\u3002
38
+ \u4FEE\u6CD5\uFF1A\u6838\u5BF9\u8BE5\u7EC4\u4EF6\u4E0E\u6D88\u8D39\u65B9\u7684 shared.vue\u3001shareScope \u548C dev \u4F9D\u8D56\u89E3\u6790\uFF0C\u4F7F\u540C\u4E00\u6E32\u67D3\u94FE\u6536\u655B\u5230\u540C\u4E00 Vue\uFF1B\u9700\u8981\u72EC\u7ACB\u8FD0\u884C\u65F6\u7684\u5B8C\u6574\u5B50\u5E94\u7528\u5E94\u4F7F\u7528 defineBridgeApp/createVueBridgeApp\u3002\u7EC4\u4EF6\u8FD0\u884C\u65F6\u7684\u7248\u672C\u82E5\u672A\u53D6\u5F97\u53EF\u9760\u8BC1\u636E\uFF0C\u4E0D\u636E\u5171\u4EAB\u8868\u731C\u6D4B\u3002`
36
39
  ),
37
40
  {
38
41
  code: ErrorCodes.VUE_RUNTIME_IDENTITY_MISMATCH,
39
- details: { remote: spec.slice(0, spec.indexOf("/")) || spec, module: spec.slice(spec.indexOf("/") + 1) || void 0, rendererVueVersion: vueRuntimeVersion, sharedVueVersion: sharedVue.version }
42
+ details: {
43
+ remote: remoteNameOf(spec),
44
+ module: moduleNameOf(spec),
45
+ stage: "adapter",
46
+ rendererVueVersion: vueRuntimeVersion,
47
+ runtimeBinding: key,
48
+ evidenceSource: "compiled-sfc-import"
49
+ }
40
50
  }
41
51
  );
42
52
  }
@@ -82,7 +92,7 @@ var RemoteErrorPlaceholder = /* @__PURE__ */ defineComponent({
82
92
  return () => {
83
93
  const err = props.error;
84
94
  const code = err?.code ?? "UNKNOWN";
85
- const message = err?.message ?? String(props.error ?? "unknown error");
95
+ const message = diagnosticMessage(err ?? props.error ?? "unknown error");
86
96
  const buttons = [
87
97
  props.retry ? h("button", {
88
98
  key: "retry",
@@ -289,7 +299,7 @@ function createRemoteComponent(loadRemote) {
289
299
  reportRemoteObservation({ remote: remoteNameOf(spec), error: err });
290
300
  throw err;
291
301
  }
292
- const identity = vueRuntimeIdentityError(spec);
302
+ const identity = vueRuntimeIdentityError(spec, inner);
293
303
  if (identity) {
294
304
  reportRemoteObservation({ remote: remoteNameOf(spec), error: identity });
295
305
  throw identity;
@@ -339,7 +349,7 @@ function createHostPages(options, load) {
339
349
  reportRemoteObservation({ remote: remoteNameOf(spec), error: err });
340
350
  throw err;
341
351
  }
342
- const identity = vueRuntimeIdentityError(spec);
352
+ const identity = vueRuntimeIdentityError(spec, inner);
343
353
  if (identity) {
344
354
  reportRemoteObservation({ remote: remoteNameOf(spec), error: identity });
345
355
  throw identity;
@@ -1,4 +1,4 @@
1
1
  /** Explicit ownership for Pinia-like store definitions; no Pinia dependency or global switching. */
2
- declare function bindStoreToApp<T extends (...args: never[]) => unknown>(useStore: T, pinia: Parameters<T>[0] | (() => Parameters<T>[0])): T;
2
+ declare function bindStoreToApp<T extends (...args: any[]) => any>(useStore: T, pinia: NoInfer<Parameters<T>[0]> | (() => NoInfer<Parameters<T>[0]>)): T;
3
3
 
4
4
  export { bindStoreToApp };
@@ -1,4 +1,4 @@
1
1
  /** Explicit ownership for Pinia-like store definitions; no Pinia dependency or global switching. */
2
- declare function bindStoreToApp<T extends (...args: never[]) => unknown>(useStore: T, pinia: Parameters<T>[0] | (() => Parameters<T>[0])): T;
2
+ declare function bindStoreToApp<T extends (...args: any[]) => any>(useStore: T, pinia: NoInfer<Parameters<T>[0]> | (() => NoInfer<Parameters<T>[0]>)): T;
3
3
 
4
4
  export { bindStoreToApp };
package/dist/vue.d.ts CHANGED
@@ -779,7 +779,7 @@ declare function createBridgeSession(options?: {
779
779
  }): BridgeSession;
780
780
 
781
781
  /** Explicit ownership for Pinia-like store definitions; no Pinia dependency or global switching. */
782
- declare function bindStoreToApp<T extends (...args: never[]) => unknown>(useStore: T, pinia: Parameters<T>[0] | (() => Parameters<T>[0])): T;
782
+ declare function bindStoreToApp<T extends (...args: any[]) => any>(useStore: T, pinia: NoInfer<Parameters<T>[0]> | (() => NoInfer<Parameters<T>[0]>)): T;
783
783
 
784
784
  declare const remoteComponent: <S extends string>(spec: S & FgComponentEntry<S>, opts?: RemoteComponentOptions) => FgRemoteVueComponent<S>;
785
785
  /** 宿主页面适配器(绑定本包运行时的 loadRemote;选项与返回值类型见 vue-adapter) */
@@ -72,7 +72,7 @@
72
72
  | `MFU-013` | Runtime reports the remote declares onSession but the host AppContext lacks sessionKey | The host did not provide a non-sensitive login generation ID (never use a token as one) | In the host login flow call `provideAppContext({ sessionKey })` — generate a new value on every successful login/re-login; token refreshes keep it |
73
73
  | `MFU-014` | Runtime reports a recursive loadRemote of the same remote inside setup/onSession's synchronous segment | Loading a module of the same remote inside the initialization's synchronous segment — the call waits on itself, deadlocking | Do not load same-remote modules inside initialization; put cross-remote loads in the async segment |
74
74
  | `MFU-018` | remoteComponent / host-pages component consumption reports "the export is not a renderable component" (with the actual export shape) | The exposes target exports a plain module/constant/non-renderable object — a successful module load does not mean a usable component | Point exposes at an `export default` component (Vue: defineComponent / `<script setup>` / functional; React: function component or memo/forwardRef); to consume a plain module use `loadRemote` instead |
75
- | `MFU-019` | Vue component direct rendering reports "the renderer and the Vue instance converged in the share scope are not the same instance" (with renderer/shared instance versions) | Proven instance split: at least one side declared shared.vue, but the consumer's vue import did not converge onto the same instance (shared.vue not declared, dev prebundling bypassing the facade, or mismatched shareScope). With split instances inject/Pinia/getCurrentInstance break across instances — typically "shell renders, inner blank, no pageerror" | Both sides declare vue in `shared` (singleton recommended) with the same shareScope; in dev verify vue was not prebundled into a second copy; full sub apps that need an independent Vue runtime must use app bridging instead of remoteComponent direct rendering. Verify via `window.__FULGURJS_SCOPE__.default.vue` |
75
+ | `MFU-019` | The current remote SFC imports a different Vue function identity from the consumer renderer | The compiler retains non-enumerable evidence from an actual Vue import in that SFC. The adapter compares the matching renderer export; it does not infer component identity from the default share scope. Equal versions do not prove equal instances | Check shared.vue, shareScope and dependency resolution; use app bridging for independent renderers. Older remotes, plain TS components, frozen components or unsupported import forms may have no evidence: they are not automatically rejected or declared converged. Use business signals and actual dependency evidence. Details identify the adapter stage, runtimeBinding and evidenceSource; unknown remote versions are not guessed |
76
76
  | `MFU-020` | The remote component subtree threw internally (its own setup/render/nested async components, including cases the region goes blank after a business errorHandler takes over) | The error originates from the remote component's own code, unrelated to federation module loading. Reported observably via `fulgurjs:error`/`onRemoteError`: the original exception is preserved in `cause`, `details.phase='render'` plus Vue's render-stage info (e.g. setup function / render function / async component loader) | Inspect the original stack on `cause` to locate the failing remote component code. To display and recover in place, pass `renderErrorComponent` to `remoteComponent`/`createHostPages` (it receives `error`/`retry` props, owns the display so the error stops propagating globally, and retry remounts the remote component); by default only observation reporting happens and business errorHandler behavior is unchanged |
77
77
  | `MFU-015` | Runtime reports an illegal bridge contract (the `./bridge` default export lacks mount/unmount or they are not functions) | The module exposed as `./bridge` was not built with `defineBridgeApp` | Build the child app entry's default export with `defineBridgeApp(...)` (see [sub app bridge](../guide/app-bridge.md)) |
78
78
  | `MFU-016` | Runtime reports bridge preparation or lifecycle failure (`details.phase` distinguishes getContext/mount/unmount; the root cause carries the child app's original error) | getContext returned a Promise/non-object, mount threw before the first commit, or unmount cleanup threw | Troubleshoot the child app code by phase: getContext must return a synchronous snapshot object; on mount failure clean up the app/root before throwing; fix unmount's cleanup logic — a container whose unmount threw is persistently locked out; recover with a full page refresh |
@@ -95,3 +95,6 @@
95
95
  - By symptom (ignore the codes): [troubleshooting index](../troubleshooting/README.md)
96
96
  - For config-stage errors run `npx @fulgurjs/federation explain` first; for deployment-side problems run `npx @fulgurjs/federation doctor` first
97
97
  - Runtime diagnostics: `window.__FULGURJS_INFO__` (per-remote status and setup stage), `window.__FULGURJS_SCOPE__` (shared negotiation results), the `fulgurjs:error` event
98
+
99
+
100
+ Default component/bridge placeholders, plugin log summaries and `__FULGURJS_INFO__.remotes` remove HTTP URL credentials, query/hash and labelled token/password/cookie/authorization values. The original rejection (including non-Error values) remains in `cause` for custom error components and business observers. Do not directly serialize or display these raw objects or `details`; redact the fields you expose. Observe bridge lifecycle failures through placeholders, custom `errorComponent` and unmount logs; do not assume every bridge failure emits the runtime `fulgurjs:error` event.
@@ -71,7 +71,7 @@
71
71
  | `MFU-013` | 运行时报远程声明 onSession 但宿主 AppContext 缺 sessionKey | 宿主未提供非敏感登录代次 ID(禁止用 token 充当) | 宿主登录流程 `provideAppContext({ sessionKey })`——每次成功登录/重登生成新值,token 刷新沿用 |
72
72
  | `MFU-014` | 运行时报 setup/onSession 同步段内递归 loadRemote 同一远程 | 初始化同步段内加载同远程模块——该调用会等待自身形成死锁 | 初始化内不要加载同远程模块;跨远程加载放异步段 |
73
73
  | `MFU-018` | remoteComponent/宿主页面组件消费时报「导出的不是可渲染组件」(附实际导出形态) | 该 exposes 指向的文件导出了普通模块/常量/不可渲染对象——模块加载成功不等于组件可用 | exposes 指向 `export default` 组件(Vue:defineComponent/`<script setup>`/函数式;React:函数组件或 memo/forwardRef);消费普通模块改用 `loadRemote` |
74
- | `MFU-019` | Vue 组件直渲染时报「渲染器与共享作用域收敛的 Vue 实例不一致」(附渲染链/共享实例双版本) | 已证实的实例分裂:至少一方声明 shared.vue,但消费方 vue 导入未收敛到同一实例(未声明 shared.vue、dev 预构建绕过门面、shareScope 不一致)。实例分裂时 inject/Pinia/getCurrentInstance 跨实例断链,常见「外壳在、内部空白且无 pageerror」 | 两侧 `shared` 均声明 vue(建议 singleton)且 shareScope 一致;dev 核对未把 vue 预构建成第二份;需独立 Vue 运行时的完整子应用改用应用桥接,不要 remoteComponent 直渲染。核实:`window.__FULGURJS_SCOPE__.default.vue` |
74
+ | `MFU-019` | 当前远程 SFC 的 Vue 导入引用与消费方渲染器不同 | 编译器从当前 SFC 实际导入的 Vue 函数保存非枚举身份依据,适配器与消费方同名函数比较;不从默认共享表推断当前组件身份。版本相同不等于实例相同 | 核对组件和消费方的 shared.vue、shareScope 与依赖解析;独立 renderer 用应用桥接。旧远程、普通 TS 组件、冻结组件或不支持的导入形态可能没有依据,此时不自动拒绝,也不宣称已确认收敛;结合业务信号与实际依赖取证。details 给出 adapter 阶段、runtimeBinding 与 evidenceSource;未知远程版本不猜测 |
75
75
  | `MFU-020` | 远程组件子树内部抛错(其 setup/render/嵌套异步组件;含错误被业务 errorHandler 接管后区域空白的场景) | 错误抛自远程组件代码本身,与联邦模块加载无关。经 `fulgurjs:error`/`onRemoteError` 观测上报:原始异常保留在 `cause`,`details.phase='render'` 并附 Vue 渲染阶段串(如 setup function / render function / async component loader) | 查看 `cause` 的原始调用栈定位远程组件内部代码。需要在该组件位置直接展示并提供恢复时,为 `remoteComponent`/`createHostPages` 传 `renderErrorComponent`(收到 `error`/`retry` props,接管展示后错误不再向全局传播,retry 重新挂载远程组件);默认仅观测上报,不改变业务 errorHandler 行为 |
76
76
  | `MFU-015` | 运行时报桥接契约非法(`./bridge` 默认导出缺 mount/unmount 或非函数) | expose `./bridge` 的模块没有用 `defineBridgeApp` 构造契约对象 | 子应用入口改用 `defineBridgeApp(...)` 默认导出(见[子应用桥接](../guide/app-bridge.md)) |
77
77
  | `MFU-016` | 运行时报桥接准备或生命周期失败(`details.phase` 区分 getContext/mount/unmount;根因含子应用原始错误) | getContext 返回 Promise/非对象、mount 首次提交前抛错、或 unmount 清理抛错 | 按 phase 排查子应用代码:getContext 返回同步快照对象;mount 失败先清理 app/root 再抛;unmount 修复清理逻辑——unmount 抛错的容器被持久封锁,整页刷新恢复 |
@@ -94,3 +94,6 @@
94
94
  - 按症状(不看码):[排错目录](../troubleshooting/README.md)
95
95
  - 配置期错误先跑 `npx @fulgurjs/federation explain`;部署面问题先跑 `npx @fulgurjs/federation doctor`
96
96
  - 运行时诊断:`window.__FULGURJS_INFO__`(各 remote 状态与 setup 阶段)、`window.__FULGURJS_SCOPE__`(shared 协商结果)、`fulgurjs:error` 事件
97
+
98
+
99
+ 默认组件/桥接占位、插件日志摘要和 `__FULGURJS_INFO__.remotes` 会清理 HTTP 地址凭据、query/hash 及标注的 token/password/cookie/authorization。真实异常(包括非 Error 拒绝值)保留在 `cause`,自定义错误组件/业务观察方仍可读取;这些原始对象和 `details` 不应直接序列化或展示,需按实际字段脱敏。桥接生命周期错误通过默认占位、自定义 `errorComponent` 和卸载日志观察;不要假设所有桥接错误都触发运行时 `fulgurjs:error`。