@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.
- package/CHANGELOG.md +14 -0
- package/dist/bridge-app-react.js +4 -4
- package/dist/bridge-app-vue.cjs +4 -1
- package/dist/bridge-app-vue.js +5 -5
- package/dist/bridge-core.cjs +8 -2
- package/dist/bridge-core.js +4 -4
- package/dist/bridge-errors.cjs +9 -3
- package/dist/bridge-errors.js +2 -2
- package/dist/bridge-host-react.cjs +11 -5
- package/dist/bridge-host-react.js +9 -7
- package/dist/bridge-host-vue.cjs +11 -5
- package/dist/bridge-host-vue.js +9 -7
- package/dist/bridge-router-react.js +4 -1
- package/dist/bridge-router-vue.js +4 -1
- package/dist/bridge-session-auto.js +2 -2
- package/dist/{chunk-MBH3TVAS.js → chunk-ATU42YF3.js} +1 -1
- package/dist/{chunk-TSPZ3EQ4.js → chunk-EGXWY5NW.js} +5 -4
- package/dist/{chunk-NVJN2ARX.js → chunk-EK5JODE4.js} +2 -2
- package/dist/{chunk-2OHKAD6I.js → chunk-FXG2TWSA.js} +1 -1
- package/dist/{chunk-YHXQHZ3E.js → chunk-NX3HRELG.js} +9 -2
- package/dist/{chunk-OQ4CGWNL.js → chunk-Y7YANGLN.js} +1 -1
- package/dist/cli.js +2 -2
- package/dist/context.cjs +4 -1
- package/dist/context.js +2 -2
- package/dist/index.cjs +35 -8
- package/dist/index.js +35 -8
- package/dist/react-adapter.cjs +10 -4
- package/dist/react-adapter.js +7 -6
- package/dist/runtime.js +13 -13
- package/dist/vue-adapter.cjs +27 -12
- package/dist/vue-adapter.js +25 -15
- package/dist/vue-store.d.cts +1 -1
- package/dist/vue-store.d.ts +1 -1
- package/dist/vue.d.ts +1 -1
- package/docs/en/reference/errors.md +4 -1
- package/docs/zh/reference/errors.md +4 -1
- package/examples/templates/react-host-vue-remote/pnpm-lock.yaml +7 -7
- package/examples/templates/react-host-vue-remote/pnpm-workspace.yaml +1 -1
- package/examples/templates/react-host-vue-remote/react-host/package.json +1 -1
- package/examples/templates/react-host-vue-remote/vue-remote/package.json +1 -1
- package/examples/templates/react-react/host/package.json +1 -1
- package/examples/templates/react-react/pnpm-lock.yaml +7 -7
- package/examples/templates/react-react/pnpm-workspace.yaml +1 -1
- package/examples/templates/react-react/remote/package.json +1 -1
- package/examples/templates/showcase/pnpm-lock.yaml +11 -11
- package/examples/templates/showcase/pnpm-workspace.yaml +1 -1
- package/examples/templates/showcase/react-host/package.json +1 -1
- package/examples/templates/showcase/react-remote/package.json +1 -1
- package/examples/templates/showcase/vue-host/package.json +1 -1
- package/examples/templates/showcase/vue-remote/package.json +1 -1
- package/examples/templates/vue-host-react-remote/pnpm-lock.yaml +7 -7
- package/examples/templates/vue-host-react-remote/pnpm-workspace.yaml +1 -1
- package/examples/templates/vue-host-react-remote/react-remote/package.json +1 -1
- package/examples/templates/vue-host-react-remote/vue-host/package.json +1 -1
- package/examples/templates/vue-vue/host/package.json +1 -1
- package/examples/templates/vue-vue/pnpm-lock.yaml +7 -7
- package/examples/templates/vue-vue/pnpm-workspace.yaml +1 -1
- package/examples/templates/vue-vue/remote/package.json +1 -1
- package/package.json +1 -1
package/dist/react-adapter.cjs
CHANGED
|
@@ -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
|
-
/**
|
|
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
|
|
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({
|
package/dist/react-adapter.js
CHANGED
|
@@ -8,11 +8,12 @@ import {
|
|
|
8
8
|
reportRemoteObservation,
|
|
9
9
|
resolvePageProviderEntries,
|
|
10
10
|
shouldResetSessionCache
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-FXG2TWSA.js";
|
|
12
12
|
import "./chunk-TSXZ7TWA.js";
|
|
13
13
|
import {
|
|
14
|
-
ErrorCodes
|
|
15
|
-
|
|
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
|
|
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
|
|
2
|
-
\u539F\u56E0\uFF1A${
|
|
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};
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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=
|
|
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
|
|
27
|
-
\u539F\u56E0\uFF1A${
|
|
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})}
|
|
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{
|
|
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};
|
package/dist/vue-adapter.cjs
CHANGED
|
@@ -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
|
-
/**
|
|
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
|
|
354
|
-
|
|
355
|
-
|
|
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\
|
|
359
|
-
\u6839\u56E0\uFF08\u5DF2\u8BC1\u5B9E\uFF09\uFF1A\
|
|
360
|
-
\u4FEE\u6CD5\uFF1A\
|
|
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: {
|
|
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
|
|
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;
|
package/dist/vue-adapter.js
CHANGED
|
@@ -9,14 +9,15 @@ import {
|
|
|
9
9
|
reportRemoteObservation,
|
|
10
10
|
resolvePageProviderEntries,
|
|
11
11
|
shouldResetSessionCache
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-FXG2TWSA.js";
|
|
13
13
|
import "./chunk-TSXZ7TWA.js";
|
|
14
14
|
import {
|
|
15
|
-
ErrorCodes
|
|
16
|
-
|
|
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
|
|
29
|
-
|
|
30
|
-
|
|
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\
|
|
34
|
-
\u6839\u56E0\uFF08\u5DF2\u8BC1\u5B9E\uFF09\uFF1A\
|
|
35
|
-
\u4FEE\u6CD5\uFF1A\
|
|
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: {
|
|
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
|
|
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;
|
package/dist/vue-store.d.cts
CHANGED
|
@@ -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:
|
|
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-store.d.ts
CHANGED
|
@@ -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:
|
|
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:
|
|
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` |
|
|
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` |
|
|
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`。
|