@fulgurjs/federation 6.12.12 → 6.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/bridge-app-react.js +4 -4
- package/dist/bridge-app-vue.js +5 -5
- package/dist/bridge-core.js +4 -4
- package/dist/bridge-errors.js +2 -2
- package/dist/bridge-host-react.js +5 -5
- package/dist/bridge-host-vue.js +5 -5
- package/dist/bridge-session-auto.js +2 -2
- package/dist/{chunk-MUATDGMR.js → chunk-2OHKAD6I.js} +23 -1
- package/dist/{chunk-PPHNZBZX.js → chunk-MBH3TVAS.js} +1 -1
- package/dist/{chunk-YXGV4ZK6.js → chunk-NVJN2ARX.js} +2 -2
- package/dist/{chunk-UTL2F4KF.js → chunk-OQ4CGWNL.js} +1 -1
- package/dist/{chunk-5ODWDP5I.js → chunk-TSPZ3EQ4.js} +1 -1
- package/dist/{chunk-4YTQSOGQ.js → chunk-YHXQHZ3E.js} +3 -1
- package/dist/cli.js +1 -1
- package/dist/context.js +2 -2
- package/dist/index.cjs +2 -2
- package/dist/index.js +2 -2
- package/dist/react-adapter.cjs +72 -37
- package/dist/react-adapter.js +22 -3
- package/dist/react.d.ts +5 -0
- package/dist/runtime-entry.d.ts +5 -0
- package/dist/runtime.js +17 -17
- package/dist/vue-adapter.cjs +87 -12
- package/dist/vue-adapter.d.cts +11 -1
- package/dist/vue-adapter.d.ts +11 -1
- package/dist/vue-adapter.js +71 -14
- package/dist/vue.d.ts +16 -1
- package/docs/en/reference/errors.md +1 -0
- package/docs/zh/reference/errors.md +1 -0
- package/package.json +1 -1
package/dist/runtime.js
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
var
|
|
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.0";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
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});
|
|
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
|
|
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
|
-
\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(
|
|
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
|
|
7
|
-
\u4FEE\u6CD5\uFF1A\u5C06 onSession \u6539\u4E3A\u5177\u540D\u5BFC\u51FA\u7684\u51FD\u6570\uFF0C\u6216\u5220\u9664\u8BE5\u5BFC\u51FA\u3002`,{remote:e.name,module:n});if(o.setupExports=t,t.globalComponents!==void 0){if(typeof t.globalComponents!="object"||t.globalComponents===null||Array.isArray(t.globalComponents))throw new E(
|
|
7
|
+
\u4FEE\u6CD5\uFF1A\u5C06 onSession \u6539\u4E3A\u5177\u540D\u5BFC\u51FA\u7684\u51FD\u6570\uFF0C\u6216\u5220\u9664\u8BE5\u5BFC\u51FA\u3002`,{remote:e.name,module:n});if(o.setupExports=t,t.globalComponents!==void 0){if(typeof t.globalComponents!="object"||t.globalComponents===null||Array.isArray(t.globalComponents))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
|
|
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
|
-
\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(
|
|
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 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
|
|
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});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
|
|
14
|
-
\u539F\u56E0\uFF1A\u5E94\u7528\u8981\u6C42 ${
|
|
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
|
|
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
|
|
17
|
-
\u539F\u56E0\uFF1A\u8981\u6C42\u7248\u672C ${
|
|
18
|
-
\u4FEE\u6CD5\uFF1A\u7EDF\u4E00\u5BBF\u4E3B\u4E0E\u8FDC\u7A0B\u7684\u4F9D\u8D56\u7248\u672C\uFF0C\u6216\u4FEE\u6B63 shared.requiredVersion\u3002`);throw
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
\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
|
|
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(
|
|
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
|
|
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
|
|
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
27
|
\u539F\u56E0\uFF1A${String(a?.message??a)}
|
|
28
28
|
\u4FEE\u6CD5\uFF1A
|
|
29
29
|
${h.join(`
|
|
30
|
-
`)}`,{remote:e.name,stage:"container"})}K(u,e);let p=
|
|
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
|
|
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){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};
|
package/dist/vue-adapter.cjs
CHANGED
|
@@ -59,7 +59,9 @@ var ErrorCodes = {
|
|
|
59
59
|
/** 远程模块在组件消费边界导出的不是可渲染组件(适配器实测导出形态后报出) */
|
|
60
60
|
COMPONENT_EXPORT_INVALID: "MFU-018",
|
|
61
61
|
/** Vue 组件直渲染的渲染器与共享作用域实际收敛的 Vue 实例不一致(身份证据已证实) */
|
|
62
|
-
VUE_RUNTIME_IDENTITY_MISMATCH: "MFU-019"
|
|
62
|
+
VUE_RUNTIME_IDENTITY_MISMATCH: "MFU-019",
|
|
63
|
+
/** 远程组件子树内部渲染错误(插件边界观测:setup/render/嵌套异步组件拒绝;原始异常保留在 cause) */
|
|
64
|
+
REMOTE_RENDER_ERROR: "MFU-020"
|
|
63
65
|
};
|
|
64
66
|
|
|
65
67
|
// src/pages.ts
|
|
@@ -228,6 +230,25 @@ function noRenderableExportError(spec, inner) {
|
|
|
228
230
|
}
|
|
229
231
|
);
|
|
230
232
|
}
|
|
233
|
+
function reportRemoteObservation(info) {
|
|
234
|
+
const rt = globalThis.__FULGURJS_RUNTIME__;
|
|
235
|
+
if (typeof rt?.reportRemoteError === "function") {
|
|
236
|
+
try {
|
|
237
|
+
rt.reportRemoteError(info);
|
|
238
|
+
return;
|
|
239
|
+
} catch {
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
try {
|
|
243
|
+
;
|
|
244
|
+
globalThis.dispatchEvent?.(
|
|
245
|
+
new CustomEvent("fulgurjs:error", { detail: info })
|
|
246
|
+
);
|
|
247
|
+
} catch {
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
var remoteNameOf = (spec) => spec.slice(0, spec.indexOf("/")) || spec;
|
|
251
|
+
var moduleNameOf = (spec) => spec.includes("/") ? spec.slice(spec.indexOf("/") + 1) : void 0;
|
|
231
252
|
function createHostPagesCore(options) {
|
|
232
253
|
const { pages, remotePrefixes, deriveSpec, schema, strict, base } = options;
|
|
233
254
|
definePages(pages, { deriveSpec, remotes: remotePrefixes, schema, strict });
|
|
@@ -409,7 +430,7 @@ var RemoteErrorPlaceholder = /* @__PURE__ */ (0, import_vue.defineComponent)({
|
|
|
409
430
|
(0, import_vue.h)("p", { style: "margin:0 0 4px;font-weight:600" }, `\u8FDC\u7A0B\u7EC4\u4EF6\u52A0\u8F7D\u5931\u8D25\uFF08\u9519\u8BEF\u7801 ${code}\uFF09`),
|
|
410
431
|
(0, import_vue.h)("p", { style: "margin:0 0 8px;word-break:break-all" }, message),
|
|
411
432
|
(0, import_vue.h)("p", { style: "margin:0 0 8px" }, "\u4FEE\u6CD5\uFF1A\u2460 \u6838\u5BF9 spec \u7684\u300C\u8FDC\u7A0B\u540D/expose \u540D\u300D\u4E0E\u8FDC\u7A0B\u5E94\u7528 exposes \u662F\u5426\u4E00\u81F4\uFF08MFU-006/008/018\uFF09\uFF1B\u2461 \u6838\u5BF9 remotes \u5730\u5740\u7AEF\u53E3\u4E0E\u8FDC\u7A0B\u670D\u52A1\u53EF\u8FBE\u6027\u3001remoteEntry \u662F\u5426\u53EF\u8BBF\u95EE\uFF08MFU-001\uFF09\uFF1B\u2462 \u67E5\u770B window \u7684 fulgurjs:error \u4E8B\u4EF6\u4E0E console \u540C\u6E90\u9519\u8BEF\u5B9A\u4F4D\u6839\u56E0\u3002"),
|
|
412
|
-
(0, import_vue.h)("p", { style: "margin:0 0 8px" }, "\
|
|
433
|
+
(0, import_vue.h)("p", { style: "margin:0 0 8px" }, "\u4E0B\u4E00\u6B65\u53D6\u8BC1\uFF08\u6309\u4E8B\u5B9E\u533A\u5206\uFF0C\u4E0D\u9884\u5224\u7ED3\u8BBA\uFF09\uFF1A\u2460 \u672C\u9519\u8BEF\u4E0A\u65B9\u300C\u539F\u56E0\u300D\u4E0E fulgurjs:error \u4E8B\u4EF6\u7684 details.stage \u6807\u660E\u5931\u8D25\u9636\u6BB5\u2014\u2014container=\u5165\u53E3/\u7F51\u7EDC\uFF0Cexpose=\u6A21\u5757\u6C42\u503C/\u5BFC\u51FA\uFF0Csetup=\u8FDC\u7A0B\u521D\u59CB\u5316\uFF0Crender=\u8FDC\u7A0B\u7EC4\u4EF6\u5185\u90E8\u6E32\u67D3\uFF1B\u524D\u7F6E\u6821\u9A8C\u6216\u914D\u7F6E\u7C7B\u62D2\u7EDD\u4E0D\u53D1\u8D77\u7F51\u7EDC\u8BF7\u6C42\uFF0CNetwork \u9762\u677F\u96F6\u65B0\u8BF7\u6C42\u4E5F\u53EF\u80FD\u5B8C\u5168\u6B63\u5E38\u3002\u2461 Network \u9762\u677F\u786E\u6709\u7EA2\u8272\u8BF7\u6C42\u65F6\uFF0C\u8BFB\u8BE5\u8BF7\u6C42\u5B9E\u9645 status \u4E0E\u54CD\u5E94\u5185\u5BB9\uFF08404/502=\u8D44\u6E90\u7F3A\u5931\u6216\u4EE3\u7406\u9519\u8BEF\uFF1B200 \u4F46\u8FD4\u56DE HTML=\u5165\u53E3\u88AB SPA fallback \u8BEF\u56DE\u9000\uFF09\u3002\u2462 Network \u9762\u677F\u96F6\u65B0\u8BF7\u6C42\u4E14\u6D88\u606F\u542B import/Failed to fetch\uFF1A\u53EF\u80FD\u662F\u6D4F\u89C8\u5668\u7F13\u5B58\u4E86\u4E0A\u6B21\u540C URL \u7684 import \u5931\u8D25\uFF08module map \u5BF9\u5931\u8D25 URL \u4E0D\u518D\u53D1\u8BF7\u6C42\uFF09\uFF0C\u4E5F\u53EF\u80FD\u662F\u52A0\u8F7D\u524D\u7684\u672C\u5730\u6821\u9A8C\u62D2\u7EDD\u2014\u2014\u5148\u7528\u300C\u5237\u65B0\u9875\u9762\u91CD\u8BD5\u300D\u6574\u9875\u91CD\u8BD5\u518D\u5224\u65AD\u3002\u2463 \u5916\u58F3\u6B63\u5E38\u800C\u5185\u90E8\u7A7A\u767D\uFF1A\u53EF\u80FD\u539F\u56E0\u5305\u62EC\u8FDC\u7A0B\u7EC4\u4EF6\u6E32\u67D3\u9519\u8BEF\u88AB\u4E1A\u52A1 handler \u63A5\u7BA1\u3001\u5408\u6CD5\u7A7A\u6570\u636E\u6216\u4F9D\u8D56\u7F3A\u5931\uFF0C\u4E0D\u7B49\u4E8E\u5DF2\u786E\u8BA4 shared.vue \u5B9E\u4F8B\u5206\u88C2\uFF1B\u6838\u5BF9 window \u7684 fulgurjs:error\uFF08\u542B MFU-020/019\uFF09\u4E0E __FULGURJS_SCOPE__ \u540E\u518D\u5B9A\u4F4D\u3002"),
|
|
413
434
|
(0, import_vue.h)("p", { style: "margin:0 0 10px" }, "\u300C\u91CD\u8BD5\u52A0\u8F7D\u300D\u5728\u5F53\u524D\u9875\u9762\u91CD\u5EFA\u52A0\u8F7D\uFF1B\u82E5\u6D4F\u89C8\u5668\u5DF2\u7F13\u5B58\u5931\u8D25\u7684\u6A21\u5757\uFF08\u5982\u8FDC\u7A0B\u9759\u6001\u5B50\u4F9D\u8D56\u66FE\u52A0\u8F7D\u5931\u8D25\uFF09\uFF0C\u8BF7\u7528\u300C\u5237\u65B0\u9875\u9762\u91CD\u8BD5\u300D\u2014\u2014\u5B83\u4F1A\u6574\u9875\u5237\u65B0\uFF08\u4FDD\u7559\u5F53\u524D\u5730\u5740\uFF09\uFF0C\u672A\u4FDD\u5B58\u7684\u9875\u9762\u72B6\u6001\u4F1A\u4E22\u5931\u3002"),
|
|
414
435
|
(0, import_vue.h)("div", { style: "margin:0" }, buttons)
|
|
415
436
|
]);
|
|
@@ -435,6 +456,7 @@ function createRecoverableErrorPlaceholder(loader, spec, userErrorComponent) {
|
|
|
435
456
|
if (!isVueRenderableComponent(inner)) throw noRenderableExportError(spec, inner);
|
|
436
457
|
recovered.value = inner;
|
|
437
458
|
} catch (e) {
|
|
459
|
+
reportRemoteObservation({ remote: remoteNameOf(spec), error: e });
|
|
438
460
|
retryError.value = e;
|
|
439
461
|
} finally {
|
|
440
462
|
retrying.value = false;
|
|
@@ -452,6 +474,35 @@ function createRecoverableErrorPlaceholder(loader, spec, userErrorComponent) {
|
|
|
452
474
|
}
|
|
453
475
|
});
|
|
454
476
|
}
|
|
477
|
+
function remoteRenderBoundary(spec, renderErrorComponent) {
|
|
478
|
+
const error = (0, import_vue.shallowRef)(void 0);
|
|
479
|
+
const epoch = (0, import_vue.ref)(0);
|
|
480
|
+
const retry = () => {
|
|
481
|
+
error.value = void 0;
|
|
482
|
+
epoch.value += 1;
|
|
483
|
+
};
|
|
484
|
+
const onErrorCaptured2 = (err, _instance, info) => {
|
|
485
|
+
const reported = Object.assign(
|
|
486
|
+
new Error(
|
|
487
|
+
`\u73B0\u8C61\uFF1A\u8FDC\u7A0B\u7EC4\u4EF6 "${spec}" \u7684\u5B50\u6811\u5185\u90E8\u629B\u51FA\u9519\u8BEF\uFF08\u6E32\u67D3\u9636\u6BB5\uFF1A${info || "\u672A\u77E5"}\uFF09\u3002
|
|
488
|
+
\u6839\u56E0\uFF08\u5DF2\u8BC1\u5B9E\uFF09\uFF1A\u9519\u8BEF\u629B\u81EA\u8FDC\u7A0B\u7EC4\u4EF6\u81EA\u8EAB\u7684 setup/render/\u5D4C\u5957\u5F02\u6B65\u7EC4\u4EF6\uFF0C\u4E0E\u8054\u90A6\u7684\u6A21\u5757\u52A0\u8F7D\u65E0\u5173\uFF1B\u539F\u59CB\u5F02\u5E38\u4FDD\u7559\u5728\u672C\u9519\u8BEF\u7684 cause \u4E0E\u4E8B\u4EF6 detail \u4E2D\u3002
|
|
489
|
+
\u4FEE\u6CD5\uFF1A\u67E5\u770B cause \u7684\u539F\u59CB\u8C03\u7528\u6808\u5B9A\u4F4D\u8FDC\u7A0B\u7EC4\u4EF6\u5185\u90E8\u4EE3\u7801\u3002\u9700\u8981\u5728\u672C\u7EC4\u4EF6\u4F4D\u7F6E\u76F4\u63A5\u5C55\u793A\u9519\u8BEF\u5E76\u63D0\u4F9B\u6062\u590D\u65F6\uFF0C\u4E3A remoteComponent/createHostPages \u4F20\u5165 renderErrorComponent\uFF08\u672C\u8FB9\u754C\u5C06\u63A5\u7BA1\u5C55\u793A\uFF0C\u9519\u8BEF\u4E0D\u518D\u5411\u5168\u5C40\u4F20\u64AD\uFF09\u3002`
|
|
490
|
+
),
|
|
491
|
+
{
|
|
492
|
+
code: ErrorCodes.REMOTE_RENDER_ERROR,
|
|
493
|
+
details: { remote: remoteNameOf(spec), module: moduleNameOf(spec), phase: "render", renderInfo: info || void 0 },
|
|
494
|
+
cause: err
|
|
495
|
+
}
|
|
496
|
+
);
|
|
497
|
+
reportRemoteObservation({ remote: remoteNameOf(spec), error: reported });
|
|
498
|
+
if (renderErrorComponent) {
|
|
499
|
+
error.value = err;
|
|
500
|
+
return false;
|
|
501
|
+
}
|
|
502
|
+
return void 0;
|
|
503
|
+
};
|
|
504
|
+
return { onErrorCaptured: onErrorCaptured2, error, epoch, retry, view: renderErrorComponent };
|
|
505
|
+
}
|
|
455
506
|
function consumerRegistry(app, captured) {
|
|
456
507
|
return app ? {
|
|
457
508
|
component(name, comp) {
|
|
@@ -484,7 +535,7 @@ async function applyPageProviders(comp, captured) {
|
|
|
484
535
|
const providers = await resolvePageProviders(captured.providers);
|
|
485
536
|
return providers && providers.length > 0 ? withPageProviders(comp, providers) : comp;
|
|
486
537
|
}
|
|
487
|
-
function sessionComponent(inner, name, initialApp, initialSession, load, spec, loadingComponent, errorComponent) {
|
|
538
|
+
function sessionComponent(inner, name, initialApp, initialSession, load, spec, loadingComponent, errorComponent, renderErrorComponent) {
|
|
488
539
|
return (0, import_vue.defineComponent)({
|
|
489
540
|
name,
|
|
490
541
|
inheritAttrs: false,
|
|
@@ -492,6 +543,8 @@ function sessionComponent(inner, name, initialApp, initialSession, load, spec, l
|
|
|
492
543
|
const app = (0, import_vue.getCurrentInstance)()?.appContext.app;
|
|
493
544
|
const current = (0, import_vue.shallowRef)();
|
|
494
545
|
const failure = (0, import_vue.shallowRef)();
|
|
546
|
+
const boundary = remoteRenderBoundary(spec, renderErrorComponent);
|
|
547
|
+
(0, import_vue.onErrorCaptured)(boundary.onErrorCaptured);
|
|
495
548
|
let session = initialSession;
|
|
496
549
|
let generation = 0;
|
|
497
550
|
let disposed = false;
|
|
@@ -503,6 +556,7 @@ function sessionComponent(inner, name, initialApp, initialSession, load, spec, l
|
|
|
503
556
|
const request = ++generation;
|
|
504
557
|
current.value = void 0;
|
|
505
558
|
failure.value = void 0;
|
|
559
|
+
boundary.error.value = void 0;
|
|
506
560
|
try {
|
|
507
561
|
const result = await load(app);
|
|
508
562
|
if (disposed || request !== generation) return;
|
|
@@ -515,7 +569,10 @@ function sessionComponent(inner, name, initialApp, initialSession, load, spec, l
|
|
|
515
569
|
session = requestedSession;
|
|
516
570
|
current.value = result;
|
|
517
571
|
} catch (error) {
|
|
518
|
-
if (!disposed && request === generation)
|
|
572
|
+
if (!disposed && request === generation) {
|
|
573
|
+
reportRemoteObservation({ remote: remoteNameOf(spec), error });
|
|
574
|
+
failure.value = error;
|
|
575
|
+
}
|
|
519
576
|
} finally {
|
|
520
577
|
pending = false;
|
|
521
578
|
}
|
|
@@ -533,7 +590,13 @@ function sessionComponent(inner, name, initialApp, initialSession, load, spec, l
|
|
|
533
590
|
generation++;
|
|
534
591
|
});
|
|
535
592
|
const ErrorView = createRecoverableErrorPlaceholder(() => load(app), spec, errorComponent);
|
|
536
|
-
return () =>
|
|
593
|
+
return () => {
|
|
594
|
+
if (boundary.view && boundary.error.value !== void 0) {
|
|
595
|
+
return (0, import_vue.h)(boundary.view, { error: boundary.error.value, retry: boundary.retry });
|
|
596
|
+
}
|
|
597
|
+
const c = current.value;
|
|
598
|
+
return c ? (0, import_vue.h)(c, { ...attrs, key: `${generation}-${boundary.epoch.value}` }, slots) : failure.value ? (0, import_vue.h)(ErrorView, { ...attrs, error: failure.value }, slots) : loadingComponent ? (0, import_vue.h)(loadingComponent) : null;
|
|
599
|
+
};
|
|
537
600
|
}
|
|
538
601
|
});
|
|
539
602
|
}
|
|
@@ -546,9 +609,16 @@ function createRemoteComponent(loadRemote) {
|
|
|
546
609
|
consumerApp: consumerRegistry(app, captured)
|
|
547
610
|
}).then(async (m) => {
|
|
548
611
|
const inner = m?.default ?? m;
|
|
549
|
-
if (!isVueRenderableComponent(inner))
|
|
612
|
+
if (!isVueRenderableComponent(inner)) {
|
|
613
|
+
const err = noRenderableExportError(spec, inner);
|
|
614
|
+
reportRemoteObservation({ remote: remoteNameOf(spec), error: err });
|
|
615
|
+
throw err;
|
|
616
|
+
}
|
|
550
617
|
const identity = vueRuntimeIdentityError(spec);
|
|
551
|
-
if (identity)
|
|
618
|
+
if (identity) {
|
|
619
|
+
reportRemoteObservation({ remote: remoteNameOf(spec), error: identity });
|
|
620
|
+
throw identity;
|
|
621
|
+
}
|
|
552
622
|
return applyPageProviders(inner, captured);
|
|
553
623
|
});
|
|
554
624
|
};
|
|
@@ -558,7 +628,7 @@ function createRemoteComponent(loadRemote) {
|
|
|
558
628
|
initialApp = app;
|
|
559
629
|
const session = readSessionKey();
|
|
560
630
|
const inner = await load(app);
|
|
561
|
-
return sessionComponent(inner, inner?.name, app, session, load, spec, opts.loadingComponent, opts.errorComponent);
|
|
631
|
+
return sessionComponent(inner, inner?.name, app, session, load, spec, opts.loadingComponent, opts.errorComponent, opts.renderErrorComponent);
|
|
562
632
|
};
|
|
563
633
|
return (0, import_vue.defineAsyncComponent)({
|
|
564
634
|
loader,
|
|
@@ -570,7 +640,7 @@ function createRemoteComponent(loadRemote) {
|
|
|
570
640
|
};
|
|
571
641
|
}
|
|
572
642
|
function createHostPages(options, load) {
|
|
573
|
-
const { beforeLoad, loadingComponent, errorComponent, delay } = options;
|
|
643
|
+
const { beforeLoad, loadingComponent, errorComponent, renderErrorComponent, delay } = options;
|
|
574
644
|
const core = createHostPagesCore(options);
|
|
575
645
|
let cacheSession;
|
|
576
646
|
const compCache = /* @__PURE__ */ new Map();
|
|
@@ -590,10 +660,15 @@ function createHostPages(options, load) {
|
|
|
590
660
|
const mod = await load(spec, { consumerApp: consumerRegistry(app, captured) });
|
|
591
661
|
let inner = mod?.default ?? mod;
|
|
592
662
|
if (!isVueRenderableComponent(inner)) {
|
|
593
|
-
|
|
663
|
+
const err = noRenderableExportError(spec, inner);
|
|
664
|
+
reportRemoteObservation({ remote: remoteNameOf(spec), error: err });
|
|
665
|
+
throw err;
|
|
594
666
|
}
|
|
595
667
|
const identity = vueRuntimeIdentityError(spec);
|
|
596
|
-
if (identity)
|
|
668
|
+
if (identity) {
|
|
669
|
+
reportRemoteObservation({ remote: remoteNameOf(spec), error: identity });
|
|
670
|
+
throw identity;
|
|
671
|
+
}
|
|
597
672
|
if (keepAlivePage && inner && typeof inner === "object") {
|
|
598
673
|
inner = Object.defineProperties({ ...inner }, { name: { value: name, configurable: true } });
|
|
599
674
|
}
|
|
@@ -605,7 +680,7 @@ function createHostPages(options, load) {
|
|
|
605
680
|
initialApp = app;
|
|
606
681
|
const session = readSessionKey();
|
|
607
682
|
const inner = await loadPage(app);
|
|
608
|
-
return sessionComponent(inner, keepAlivePage ? name : inner.name, app, session, loadPage, spec, loadingComponent, errorComponent);
|
|
683
|
+
return sessionComponent(inner, keepAlivePage ? name : inner.name, app, session, loadPage, spec, loadingComponent, errorComponent, renderErrorComponent);
|
|
609
684
|
};
|
|
610
685
|
const asyncComp = (0, import_vue.defineAsyncComponent)({
|
|
611
686
|
loader: pageLoader,
|
package/dist/vue-adapter.d.cts
CHANGED
|
@@ -11,6 +11,14 @@ import './context.cjs';
|
|
|
11
11
|
interface RemoteComponentOptions {
|
|
12
12
|
loadingComponent?: Component;
|
|
13
13
|
errorComponent?: Component;
|
|
14
|
+
/**
|
|
15
|
+
* 远程组件子树渲染错误占位(P01 可选接线):提供后,本组件边界接管远程组件内部
|
|
16
|
+
* setup/render/嵌套异步组件的渲染错误——停止该错误向全局继续传播(本边界已消费),
|
|
17
|
+
* 渲染此组件(props:error 原始异常 + retry 重新挂载远程组件)。
|
|
18
|
+
* 未提供时仅观测上报(fulgurjs:error,错误码 MFU-020,原始异常保留在 cause),
|
|
19
|
+
* 不改变错误传播语义——业务 errorHandler / onErrorCaptured 行为与接入前完全一致。
|
|
20
|
+
*/
|
|
21
|
+
renderErrorComponent?: Component;
|
|
14
22
|
retries?: number;
|
|
15
23
|
delay?: number;
|
|
16
24
|
timeout?: number;
|
|
@@ -31,8 +39,10 @@ interface HostPagesOptions extends HostPagesCoreOptions {
|
|
|
31
39
|
beforeLoad?: () => void | Promise<void>;
|
|
32
40
|
/** 加载期占位组件(骨架屏) */
|
|
33
41
|
loadingComponent?: Component;
|
|
34
|
-
/**
|
|
42
|
+
/** 错误占位(缺省 = 内置错误占位:错误码+根因+修法+重试加载/刷新页面重试;自定义时完全接管) */
|
|
35
43
|
errorComponent?: Component;
|
|
44
|
+
/** 远程页面子树渲染错误占位(可选接管:提供后本边界消费渲染错误并展示 error/retry;缺省仅观测上报) */
|
|
45
|
+
renderErrorComponent?: Component;
|
|
36
46
|
/** 骨架屏延迟 ms(默认 200,防闪) */
|
|
37
47
|
delay?: number;
|
|
38
48
|
}
|
package/dist/vue-adapter.d.ts
CHANGED
|
@@ -11,6 +11,14 @@ import './context.js';
|
|
|
11
11
|
interface RemoteComponentOptions {
|
|
12
12
|
loadingComponent?: Component;
|
|
13
13
|
errorComponent?: Component;
|
|
14
|
+
/**
|
|
15
|
+
* 远程组件子树渲染错误占位(P01 可选接线):提供后,本组件边界接管远程组件内部
|
|
16
|
+
* setup/render/嵌套异步组件的渲染错误——停止该错误向全局继续传播(本边界已消费),
|
|
17
|
+
* 渲染此组件(props:error 原始异常 + retry 重新挂载远程组件)。
|
|
18
|
+
* 未提供时仅观测上报(fulgurjs:error,错误码 MFU-020,原始异常保留在 cause),
|
|
19
|
+
* 不改变错误传播语义——业务 errorHandler / onErrorCaptured 行为与接入前完全一致。
|
|
20
|
+
*/
|
|
21
|
+
renderErrorComponent?: Component;
|
|
14
22
|
retries?: number;
|
|
15
23
|
delay?: number;
|
|
16
24
|
timeout?: number;
|
|
@@ -31,8 +39,10 @@ interface HostPagesOptions extends HostPagesCoreOptions {
|
|
|
31
39
|
beforeLoad?: () => void | Promise<void>;
|
|
32
40
|
/** 加载期占位组件(骨架屏) */
|
|
33
41
|
loadingComponent?: Component;
|
|
34
|
-
/**
|
|
42
|
+
/** 错误占位(缺省 = 内置错误占位:错误码+根因+修法+重试加载/刷新页面重试;自定义时完全接管) */
|
|
35
43
|
errorComponent?: Component;
|
|
44
|
+
/** 远程页面子树渲染错误占位(可选接管:提供后本边界消费渲染错误并展示 error/retry;缺省仅观测上报) */
|
|
45
|
+
renderErrorComponent?: Component;
|
|
36
46
|
/** 骨架屏延迟 ms(默认 200,防闪) */
|
|
37
47
|
delay?: number;
|
|
38
48
|
}
|