@fulgurjs/federation 4.2.1 → 4.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/README.md +30 -23
- package/dist/{chunk-S3MYAJG5.js → chunk-LU3MBKB2.js} +1 -1
- package/dist/{chunk-NUZKZUTD.js → chunk-NOMYWDZN.js} +6 -9
- package/dist/cli.js +78 -33
- package/dist/context.cjs +5 -5
- package/dist/context.js +5 -5
- package/dist/index.cjs +74 -89
- package/dist/index.js +74 -89
- package/dist/runtime.js +22 -10
- package/dist/vue-adapter.cjs +6 -9
- package/dist/vue-adapter.js +1 -1
- package/dist/vue.cjs +72 -58
- package/docs//350/277/201/347/247/273/346/214/207/345/215/227.md +6 -5
- package/examples/README.md +22 -0
- package/examples/host/fulgurjs.config.ts +26 -0
- package/examples/remote-a/fulgurjs.config.ts +24 -0
- package/examples/remote-a/src/views/Detail.vue +3 -0
- package/examples/remote-a/src/views/Home.vue +3 -0
- package/package.json +2 -1
- package/examples/fulgurjs.config.example.ts +0 -33
package/dist/runtime.js
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
1
|
-
var
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
var de=/^v?(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:-((?:[0-9A-Za-z-]+)(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z.-]+)?$/;function L(i){let c=de.exec(String(i).trim());return c?{major:Number(c[1]),minor:Number(c[2]??0),patch:Number(c[3]??0),pre:c[4]?c[4].split("."):[]}:null}function ge(i,c){if(i.length===0&&c.length===0)return 0;if(i.length===0)return 1;if(c.length===0)return-1;let l=Math.max(i.length,c.length);for(let o=0;o<l;o++){let g=i[o],y=c[o];if(g===void 0)return-1;if(y===void 0)return 1;let w=/^\d+$/.test(g),b=/^\d+$/.test(y);if(w&&b){let I=Number(g)-Number(y);if(I!==0)return I}else{if(w!==b)return w?-1:1;if(g!==y)return g<y?-1:1}}return 0}function O(i,c){let l=L(i),o=L(c);return!l||!o?i<c?-1:i>c?1:0:l.major!==o.major?l.major-o.major:l.minor!==o.minor?l.minor-o.minor:l.patch!==o.patch?l.patch-o.patch:ge(l.pre,o.pre)}var he=/^[a-z]+[+:-]/i;function j(i,c){if(c===!1||c==null||c==="")return!0;let l=String(c).trim();return!l||l==="*"||l==="latest"||he.test(l)?!0:l.split("||").some(o=>ye(i,o.trim()))}function ye(i,c){if(!c||c==="*")return!L(i)?.pre.length;let l=c.split(/\s+-\s+/);if(l.length===2){let y=l[0].trim(),w=l[1].trim();return!(!j(i,`>=${y}`)||!j(i,`<=${w}`))}let o=L(i);if(!o)return!1;let g=Se(c);if(g===null)return!0;for(let y of g)if(!Pe(o,i,y))return!1;return!(o.pre.length>0&&!g.some(y=>y.ver.pre.length>0)&&!g.some(w=>w.ver.major===o.major&&w.ver.minor===o.minor&&w.ver.patch===o.patch))}function Se(i){let c=[],l=i.trim().split(/\s+/).filter(Boolean);if(l.length===0)return null;for(let o of l){let g=/^(>=|<=|>|<|=|\^|~)?(.*)$/.exec(o);if(!g)return null;let y=g[1],w=g[2],b=Ee(y,w);if(b===null)return null;c.push(...b)}return c}function Ee(i,c){let l=we(c);if(!l)return null;let{ver:o,partial:g}=l;switch(i){case"^":{let y=Re(o);return y?[{op:">=",ver:o},{op:"<",ver:y}]:null}case"~":{let y=g>=2?{major:o.major,minor:o.minor+1,patch:0,pre:[]}:{major:o.major+1,minor:0,patch:0,pre:[]};return[{op:">=",ver:o},{op:"<",ver:y}]}case">=":return[{op:">=",ver:o}];case">":return g===1?[{op:">=",ver:{major:o.major+1,minor:0,patch:0,pre:[]}}]:g===2?[{op:">=",ver:{major:o.major,minor:o.minor+1,patch:0,pre:[]}}]:[{op:">",ver:o}];case"<":return g===1?[{op:"<",ver:{major:o.major,minor:0,patch:0,pre:[]}}]:g===2?[{op:"<",ver:{major:o.major,minor:o.minor,patch:0,pre:[]}}]:[{op:"<",ver:o}];case"<=":return[{op:"<=",ver:o}];case"=":case void 0:return g===1?[{op:">=",ver:o},{op:"<",ver:{major:o.major+1,minor:0,patch:0,pre:[]}}]:g===2?[{op:">=",ver:o},{op:"<",ver:{major:o.major,minor:o.minor+1,patch:0,pre:[]}}]:[{op:"=",ver:o}];default:return null}}function Re(i){return i.major>0?{major:i.major+1,minor:0,patch:0,pre:[]}:i.minor>0?{major:0,minor:i.minor+1,patch:0,pre:[]}:{major:0,minor:0,patch:i.patch+1,pre:[]}}function we(i){let c=i.replace(/^v/,"").trim();if(!c||c==="*"||c==="x"||c==="X")return{ver:{major:0,minor:0,patch:0,pre:[]},partial:0};let l=c.split("."),o=[],g=0;for(let b of l.slice(0,3))if(/^\d+$/.test(b))o.push(Number(b)),g++;else{if(b==="x"||b==="X"||b==="*")break;break}let y=c.split("-"),w=y.length>1?y.slice(1).join("-").split("+")[0].split("."):[];return g===0&&w.length===0?{ver:{major:0,minor:0,patch:0,pre:[]},partial:0}:{ver:{major:o[0]??0,minor:o[1]??0,patch:o[2]??0,pre:w},partial:g}}function be(i,c){switch(c){case">=":return i>=0;case">":return i>0;case"<":return i<0;case"<=":return i<=0;case"=":return i===0}}function Pe(i,c,l){let o=`${i.major}.${i.minor}.${i.patch}`+(i.pre.length?`-${i.pre.join(".")}`:"");if(l.upper)return!(!(O(o,`${l.ver.major}.${l.ver.minor}.${l.ver.patch}`+(l.ver.pre.length?`-${l.ver.pre.join(".")}`:""))>=0)||!(O(o,`${l.upper.major}.${l.upper.minor}.${l.upper.patch}`)<0));let g=O(o,`${l.ver.major}.${l.ver.minor}.${l.ver.patch}`+(l.ver.pre.length?`-${l.ver.pre.join(".")}`:"")),y=be(g,l.op);return l.ver.pre.length>0&&i.pre.length===0&&(l.op===">"||l.op==="<")?!1:y}var S=class extends Error{code;details;constructor(c,l,o){super(`[fulgurjs:${c}] ${l}`),this.name="FgError",this.code=c,this.details=o}},E={REMOTE_LOAD_FAILED:"MFU-001",REMOTE_NAME_MISMATCH:"MFU-002",SHARE_STRICT_VERSION:"MFU-003",SHARE_NOT_AVAILABLE:"MFU-004",CONTAINER_REINIT_CONFLICT:"MFU-005",MODULE_NOT_EXPOSED:"MFU-006",PRELOAD_FAILED:"MFU-007",REMOTE_UNKNOWN:"MFU-008",EMPTY_EXPORTS:"MFU-009",SINGLETON_SKEW:"MFU-010",SETUP_INVALID_EXPORT:"MFU-011",SETUP_RUN_FAILED:"MFU-012",SETUP_SESSION_KEY_MISSING:"MFU-013",SETUP_RECURSION:"MFU-014"};var W="4.3.1";var _e="__fulgurjsSetup",$e="__FULGURJS_APP_CONFIG__",D=15e3,z=2,Me=5,ve=3e4,Ie=4e3,Te=.2;function Oe(){let i=Object.create(null),c=new Map,l=[],o=new Set,g=new Map,y=new Map,w=new WeakMap,b=new WeakMap,I={},Z=()=>{for(let e of l)try{e.init?.(I)}catch(r){console.warn("[fulgurjs] \u8FD0\u884C\u65F6\u6269\u5C55\u521D\u59CB\u5316\u5931\u8D25\uFF0C\u8BE5\u6269\u5C55\u5C06\u4E0D\u53EF\u7528\uFF1A",e.name,r)}},k=new Map,A,Q=e=>{let r=k.get(e);return r||k.set(e,r={}),r},V=()=>globalThis[$e]??{};async function K(e,r,t,n){let a=u=>u instanceof S?u:new S(E.SETUP_RUN_FAILED,`\u73B0\u8C61\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${e}" \u7684 ${n} \u521D\u59CB\u5316\u5931\u8D25\u3002
|
|
2
|
+
\u539F\u56E0\uFF1A${String(u?.message??u)}
|
|
3
|
+
\u4FEE\u6CD5\uFF1A\u68C0\u67E5\u5E76\u4FEE\u590D\u8BE5 ${n} \u51FD\u6570\u540E\u91CD\u65B0\u52A0\u8F7D\uFF1B\u5931\u8D25\u7F13\u5B58\u5DF2\u6E05\u9664\uFF0C\u53EF\u4EE5\u76F4\u63A5\u91CD\u8BD5\u3002`,{remote:e,phase:n});A=e;let s;try{s=r(t)}catch(u){throw a(u)}finally{A=void 0}try{await s}catch(u){throw a(u)}}async function ee(e,r,t,n){e.debug.setup="pending";try{if(e.manifestUrl)try{await F(`${e.name}/${t}`)}catch{}let a=await r.get(t),s=a?.default;if(typeof s!="function")throw new S(E.SETUP_INVALID_EXPORT,`\u73B0\u8C61\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${e.name}" \u7684 setup \u6A21\u5757 "${t}" \u65E0\u6CD5\u521D\u59CB\u5316\u3002
|
|
4
|
+
\u539F\u56E0\uFF1A\u9ED8\u8BA4\u5BFC\u51FA\u7C7B\u578B\u4E3A ${a==null?String(a):typeof s}\uFF0C\u5E94\u4E3A\u51FD\u6570\u3002
|
|
5
|
+
\u4FEE\u6CD5\uFF1A\u5728 setup \u6307\u5411\u7684\u6587\u4EF6\u4E2D\u9ED8\u8BA4\u5BFC\u51FA\u51FD\u6570\uFF0C\u4F8B\u5982 export default async function setup(context) { ... }\uFF1B\u5177\u540D onSession \u53EF\u9009\u3002`,{remote:e.name,module:t});if(a.onSession!==void 0&&typeof a.onSession!="function")throw new S(E.SETUP_INVALID_EXPORT,`\u73B0\u8C61\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${e.name}" \u7684 setup \u6A21\u5757 "${t}" \u65E0\u6CD5\u521D\u59CB\u5316\u3002
|
|
6
|
+
\u539F\u56E0\uFF1AonSession \u5BFC\u51FA\u7C7B\u578B\u4E3A ${typeof a.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:t});n.setupExports=a,await K(e.name,s,{appContext:V(),signal:(n.controller??=new AbortController).signal},"setup"),e.debug.setup="ready"}catch(a){throw e.debug.setup="failed",n.setupExports=void 0,a}}async function re(e,r,t){let n=V(),a=n?.sessionKey;if(typeof a!="string"||a==="")throw new S(E.SETUP_SESSION_KEY_MISSING,`\u73B0\u8C61\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${e.name}" \u58F0\u660E\u4E86 onSession\uFF0C\u4F46\u5BBF\u4E3B\u5C1A\u672A\u63D0\u4F9B\u6709\u6548\u7684 AppContext.sessionKey\u3002
|
|
8
|
+
\u539F\u56E0\uFF1A\u5F53\u524D\u503C\u4E3A ${a===void 0?"\u7F3A\u5931":JSON.stringify(a)}\u3002
|
|
9
|
+
\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===a)return r.sessionPromise;r.controller?.abort();let s=new AbortController;r.controller=s,r.sessionKey=a;let u=r.sessionPromise?r.sessionPromise.catch(()=>{}):Promise.resolve(),p=(async()=>{await u,!s.signal.aborted&&await K(e.name,t,{appContext:n,sessionKey:a,signal:s.signal},"onSession")})();return r.sessionPromise=p,p.catch(()=>{r.sessionKey===a&&(r.sessionKey=void 0,r.sessionPromise=void 0)}),p}async function te(e,r){let t=r?.[_e];if(typeof t!="string"||t==="")return;let n=Q(e.name);n.setupPromise||(n.setupPromise=ee(e,r,t,n).catch(s=>{throw n.setupPromise=void 0,s})),await n.setupPromise;let a=n.setupExports?.onSession;typeof a=="function"&&await re(e,n,a)}function ne(){for(let e of k.values()){try{e.controller?.abort()}catch{}e.sessionKey=void 0,e.sessionPromise=void 0}}let U=e=>i[e]??=Object.create(null);function _(e){try{I.onRemoteError?.(e)}catch{}typeof window<"u"&&window.dispatchEvent(new CustomEvent("fulgurjs:error",{detail:e}))}function oe(e="default"){return U(e),i}function se(e,r,t,n,a={}){let s=U(e||"default"),u=Object.hasOwn(s,r)?s[r]:void 0,p=u&&typeof u=="object"?u:void 0;p||(p=Object.create(null),s[r]=p),!(Object.hasOwn(p,t)&&p[t])&&(p[t]={version:t,get:n,from:a.from??"unknown",eager:!!a.eager,loaded:!!a.loaded})}function ie(e){let r=(t,n,a)=>{if(t===void 0)return;if(!(typeof t=="number"&&(a?Number.isInteger(t)&&t>=0&&t<=10:Number.isFinite(t)&&t>0)))throw new Error(`[fulgurjs] \u8FDC\u7A0B\u5E94\u7528 "${e.name}" \u7684 ${n} \u914D\u7F6E\u65E0\u6548\uFF1A\u5F53\u524D\u4E3A ${String(t)}\uFF0C\u5E94\u4E3A${a?" 0 \u5230 10 \u7684\u6574\u6570":"\u5927\u4E8E 0 \u7684\u6709\u9650\u6570\u5B57"}\u3002\u8BF7\u4FEE\u6B63 registerRemote \u914D\u7F6E\u3002`)};r(e.timeout,"timeout"),r(e.retries,"retries",!0),e.breaker&&(r(e.breaker.threshold,"breaker.threshold"),r(e.breaker.resetMs,"breaker.resetMs"))}function H(e){for(let r of e){ie(r);let t=c.get(r.name);c.set(r.name,{timeout:D,retries:z,...t,...r,breakerThreshold:r.breaker?.threshold??t?.breakerThreshold??Me,breakerResetMs:r.breaker?.resetMs??t?.breakerResetMs??ve,state:t?.state??"idle",breakerState:t?.breakerState??{fails:0,openUntil:0},entryInflight:t?.entryInflight??new Map,debug:t?.debug??{entry:r.entry,status:"idle",setup:"none"}})}}function ae(e){H([e])}function ce(e){l.push(...e),Z()}async function le(e,r={}){let t=r.shareScope||"default",n=r.shareKey||e,s=U(t)[n]||{},u=Object.keys(s),p=r.requiredVersion,h=u.filter(f=>p===void 0||p===!1||j(f,p)),d;if(r.singleton&&u.length>0){let f=u.filter(m=>s[m].loaded);if(d=[...f.length?f:u].sort(O).pop(),!h.includes(d)){let m=s[d],v=`\u73B0\u8C61\uFF1A\u5171\u4EAB\u5355\u4F8B "${n}" \u7684\u5B9E\u9645\u7248\u672C\u4E0D\u6EE1\u8DB3\u5F53\u524D\u5E94\u7528\u8981\u6C42\u3002
|
|
10
|
+
\u539F\u56E0\uFF1A\u5E94\u7528\u8981\u6C42 ${p??"\u4EFB\u610F\u7248\u672C"}\uFF0C\u4F5C\u7528\u57DF\u4E2D\u6709 ${u.join("\u3001")}\uFF1B\u4E3A\u4FDD\u8BC1\u5168\u9875\u53EA\u4F7F\u7528\u4E00\u4E2A\u5B9E\u4F8B\uFF0C\u6700\u7EC8\u590D\u7528 ${m.from} \u63D0\u4F9B\u7684 ${d}\u3002
|
|
11
|
+
\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
|
|
12
|
+
\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 S(E.SHARE_STRICT_VERSION,v,{shareKey:n,requiredVersion:p});throw _({remote:m.from,error:T}),T}let $=`${t}|${n}|${p??"*"}|${d}|${u.join(",")}`;o.has($)||(o.add($),console.warn(`[fulgurjs:MFU-010] ${v}`))}}else if(d=[...h].sort(O).pop(),!d){if(r.strictVersion){let m=new S(E.SHARE_STRICT_VERSION,`\u73B0\u8C61\uFF1A\u5171\u4EAB\u4F5C\u7528\u57DF "${t}" \u4E2D\u627E\u4E0D\u5230\u7B26\u5408\u8981\u6C42\u7684 "${n}"\u3002
|
|
13
|
+
\u539F\u56E0\uFF1A\u8981\u6C42\u7248\u672C ${p}\uFF0C\u5F53\u524D\u53EF\u7528\u7248\u672C\u4E3A ${u.join("\u3001")||"\u65E0"}\u3002
|
|
14
|
+
\u4FEE\u6CD5\uFF1A\u7EDF\u4E00\u5BBF\u4E3B\u4E0E\u8FDC\u7A0B\u7684\u4F9D\u8D56\u7248\u672C\uFF0C\u6216\u4FEE\u6B63 shared.requiredVersion\u3002`);throw _({remote:n,error:m}),m}if(r.fallback)return r.fallback();let f=new S(E.SHARE_NOT_AVAILABLE,`\u73B0\u8C61\uFF1A\u65E0\u6CD5\u52A0\u8F7D\u5171\u4EAB\u4F9D\u8D56 "${n}"\u3002
|
|
15
|
+
\u539F\u56E0\uFF1A\u4F5C\u7528\u57DF "${t}" \u4E2D\u6CA1\u6709\u7B26\u5408 ${p??"\u4EFB\u610F\u7248\u672C"} \u8981\u6C42\u7684\u7248\u672C\uFF0C\u4E14\u672A\u914D\u7F6E\u672C\u5730\u526F\u672C\u3002
|
|
16
|
+
\u4FEE\u6CD5\uFF1A\u5728\u5BBF\u4E3B\u6216\u8FDC\u7A0B\u6CE8\u518C\u8BE5\u4F9D\u8D56\uFF0C\u6216\u4E3A shared \u914D\u7F6E\u53EF\u7528\u7684\u672C\u5730\u526F\u672C\u3002`,{shareKey:n,requiredVersion:p});throw _({remote:n,error:f}),f}let R=s[d];if(I.resolveShare){let f=await I.resolveShare({shareKey:n,shareScope:t,requiredVersion:p,picked:R,available:Object.values(s)});f&&(R=f)}return R.loaded=!0,R.get()}function q(e){try{let r=new URL(e,typeof location<"u"?location.href:"http://f.invalid");return r.protocol+"//"+r.host+r.pathname}catch{return String(e).replace(/[?#].*$/,"")}}function G(e,r,t){return new Promise((n,a)=>{let s=setTimeout(()=>a(new Error(`\u7B49\u5F85\u8D85\u8FC7 ${r} \u6BEB\u79D2\uFF1A${t}`)),r);e.then(u=>{clearTimeout(s),n(u)},u=>{clearTimeout(s),a(u)})})}let ue=e=>new Promise(r=>setTimeout(r,e));function N(e,r){if(!e||typeof e.get!="function")throw new Error(`\u8FDC\u7A0B\u5E94\u7528 "${r.name}" \u7684 remoteEntry \u672A\u5BFC\u51FA\u5BB9\u5668\u63A5\u53E3\u3002\u8BF7\u786E\u8BA4\u5165\u53E3\u5BFC\u51FA\u4E86 get()\uFF0C\u5E76\u68C0\u67E5\u8BE5\u5730\u5740\u662F\u5426\u8FD4\u56DE\u6B63\u786E\u7684\u8054\u90A6\u5165\u53E3 JS\u3002`);if(e.name&&r.name&&e.name!==r.name){let t=`\u8FDC\u7A0B\u5165\u53E3\u81EA\u62A5\u540D\u79F0 "${e.name}" \u4E0E\u5BBF\u4E3B\u914D\u7F6E\u540D\u79F0 "${r.name}" \u4E0D\u4E00\u81F4\u3002\u8BF7\u7EDF\u4E00\u4E24\u4FA7 federation({ name }) \u4E0E remotes \u7684\u540D\u79F0\u3002`;if(r.promise)console.warn(`[fulgurjs] ${t} \u5F53\u524D\u662F\u52A8\u6001 Promise \u8FDC\u7A0B\uFF0C\u7EE7\u7EED\u52A0\u8F7D\u3002`);else throw Object.assign(new Error(t),{code:E.REMOTE_NAME_MISMATCH})}}async function J(e,r){let t=r.entryInflight.get(e),n=t??import(e);return t||(r.entryInflight.set(e,n),n.catch(()=>r.entryInflight.delete(e))),G(n,r.timeout??D,`\u52A0\u8F7D\u8FDC\u7A0B\u5165\u53E3 ${q(e)}`)}async function X(e,r){let t=e.shareScope||"default";if(e.container){let s=b.get(e.container);if(s&&s!==t)throw new S(E.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 "${t}" \u521D\u59CB\u5316\u3002\u8BF7\u7EDF\u4E00 shareScope \u914D\u7F6E\u3002`);return e.container}if(e.containerPromise)return e.containerPromise;let n=e.breakerState;if(n.openUntil>Date.now()){let s=new S(E.REMOTE_LOAD_FAILED,`\u8FDC\u7A0B\u5E94\u7528 "${e.name}" \u8FDE\u7EED\u52A0\u8F7D\u5931\u8D25\uFF0C\u7194\u65AD\u5668\u5DF2\u5F00\u542F\uFF1B\u5C06\u5728 ${new Date(n.openUntil).toISOString()} \u540E\u5141\u8BB8\u91CD\u8BD5\u3002\u8BF7\u5148\u68C0\u67E5\u8FDC\u7A0B\u5165\u53E3\u670D\u52A1\u548C\u7F51\u7EDC\u3002`,{remote:e.name});throw _({remote:e.name,error:s}),s}e.state="loading",e.debug.status="loading";let a=(async()=>{let s=[];if(e.promise)s.push(async()=>{let f=await G(e.promise(),e.timeout??D,`\u89E3\u6790\u52A8\u6001\u8FDC\u7A0B\u5E94\u7528 "${e.name}"`),m=typeof f=="string"?await J(f,e):f;return N(m,e),m});else for(let f of[e.entry,...e.fallback??[]])s.push(async()=>{let m=await J(f,e);return N(m,e),m});let u,p,h=!1,d=r?.retries??e.retries??z;for(let f of s){for(let m=0;m<=d;m++){let v=performance.now();try{u=await f(),e.lastLoadMs=Math.round(performance.now()-v),e.debug.lastLoadMs=e.lastLoadMs,h=!0;break}catch($){if(p=$,$?.code)throw $;m<d&&await ue(Math.min(Ie,200*2**m)*(1-Te*(1-2*Math.random())))}}if(h)break}if(!h||!u){let f=q(e.entry),m=[];throw/^https?:\/\//.test(e.entry)&&typeof location<"u"?(m.push(`1. \u5728\u6D4F\u89C8\u5668\u6253\u5F00 ${f}\uFF0C\u786E\u8BA4\u8FDC\u7A0B\u5F00\u53D1\u670D\u52A1\u5DF2\u542F\u52A8\uFF0C\u5E76\u8FD4\u56DE JS \u800C\u975E HTML\u3002`),m.push("2. \u6838\u5BF9 federation({ remotes }) \u4E2D\u7684\u5730\u5740\uFF1B\u5F00\u53D1\u548C\u751F\u4EA7\u5730\u5740\u53EF\u4EE5\u4E0D\u540C\u3002"),m.push("3. \u82E5\u8DE8\u57DF\uFF0C\u68C0\u67E5\u8FDC\u7A0B\u5F00\u53D1\u670D\u52A1\u7684 server.cors \u914D\u7F6E\u3002")):(m.push(`1. \u5728\u6D4F\u89C8\u5668\u6253\u5F00 ${f}\uFF0C\u786E\u8BA4\u8FDC\u7A0B\u5E94\u7528\u5DF2\u90E8\u7F72\uFF0C\u4E14\u5165\u53E3\u8FD4\u56DE JS\u3002`),m.push("2. \u68C0\u67E5 Nginx/CDN \u7684\u5165\u53E3\u8DEF\u5F84\u6620\u5C04\uFF1B\u8BE5\u5730\u5740\u4E0D\u80FD\u56DE\u9000\u5230 index.html\u3002")),new S(E.REMOTE_LOAD_FAILED,`\u73B0\u8C61\uFF1A\u65E0\u6CD5\u4ECE ${f} \u52A0\u8F7D\u8FDC\u7A0B\u5E94\u7528 "${e.name}"\u3002
|
|
17
|
+
\u539F\u56E0\uFF1A${String(p?.message??p)}
|
|
18
|
+
\u4FEE\u6CD5\uFF1A
|
|
19
|
+
${m.join(`
|
|
20
|
+
`)}`,{remote:e.name})}N(u,e);let R=b.get(u);if(R&&R!==t)throw new S(E.CONTAINER_REINIT_CONFLICT,`\u8FDC\u7A0B\u5BB9\u5668 "${e.name}" \u5DF2\u4F7F\u7528\u5171\u4EAB\u4F5C\u7528\u57DF "${R}" \u521D\u59CB\u5316\uFF0C\u4E0D\u80FD\u518D\u4EE5 "${t}" \u521D\u59CB\u5316\u3002\u8BF7\u7EDF\u4E00 shareScope \u914D\u7F6E\u3002`);return typeof u.init=="function"&&await u.init(i),b.set(u,t),e.container=u,e.state="loaded",e.debug.status="loaded",n.fails=0,u})();e.containerPromise=a;try{return await a}catch(s){if(e.containerPromise=void 0,e.state="failed",e.debug.status="failed",e.debug.error=String(s?.message??s),n.fails+=1,n.fails>=e.breakerThreshold&&(n.openUntil=Date.now()+e.breakerResetMs,n.fails=0),s instanceof S)throw _({remote:e.name,error:s}),s;if(s?.code)throw _({remote:e.name,error:s}),s;let u=new S(E.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});throw _({remote:e.name,error:u}),u}}function C(e){let r=e.indexOf("/");return r===-1?{remote:e,module:""}:{remote:e.slice(0,r),module:B(e.slice(r+1))}}function B(e){return e?e.startsWith(".")?e:`./${e}`:""}async function fe(e,r){let{remote:t,module:n}=C(e);if(n&&A===t)throw new S(E.SETUP_RECURSION,`\u73B0\u8C61\uFF1A\u52A0\u8F7D "${e}" \u65F6\uFF0C\u8FDC\u7A0B\u5E94\u7528 "${t}" \u7684 setup/onSession \u53C8\u540C\u6B65\u52A0\u8F7D\u4E86\u81EA\u8EAB\u6A21\u5757\uFF0C\u5F62\u6210\u5FAA\u73AF\u7B49\u5F85\u3002
|
|
21
|
+
\u539F\u56E0\uFF1A\u521D\u59CB\u5316\u5C1A\u672A\u5B8C\u6210\uFF0C\u4E0D\u80FD\u7B49\u5F85\u81EA\u8EAB\u7684\u521D\u59CB\u5316\u7ED3\u679C\u3002
|
|
22
|
+
\u4FEE\u6CD5\uFF1A\u4E0D\u8981\u5728 setup/onSession \u4E2D\u52A0\u8F7D\u540C\u4E00\u8FDC\u7A0B\u7684\u6A21\u5757\uFF1B\u8BF7\u5728\u9875\u9762\u7EC4\u4EF6\u4E2D\u52A0\u8F7D\uFF0C\u6216\u901A\u8FC7 context \u89E3\u8026\u3002`,{remote:t});try{I.beforeLoadRemote?.({remote:t,module:n})}catch(h){console.warn("[fulgurjs] beforeLoadRemote \u89C2\u6D4B\u94A9\u5B50\u6267\u884C\u5931\u8D25\uFF1B\u6A21\u5757\u52A0\u8F7D\u5C06\u7EE7\u7EED\u3002\u8BF7\u68C0\u67E5\u8BE5\u94A9\u5B50\uFF1A",h)}let a=c.get(t);if(!a)throw new S(E.REMOTE_UNKNOWN,`\u672A\u77E5\u8FDC\u7A0B\u5E94\u7528 "${t}"\u3002\u8BF7\u5728 federation({ remotes }) \u4E2D\u914D\u7F6E\uFF0C\u6216\u5728\u52A0\u8F7D\u524D\u8C03\u7528 registerRemote()\u3002`,{remote:t});let s;try{let h=n&&a.manifestUrl?F(e):Promise.resolve();[s]=await Promise.all([X(a,{retries:r?.retries}),h])}catch(h){if(r?.fallbackModule)return console.error(`[fulgurjs] \u8FDC\u7A0B\u6A21\u5757 "${e}" \u52A0\u8F7D\u5931\u8D25\uFF0C\u6B63\u5728\u4F7F\u7528\u663E\u5F0F\u914D\u7F6E\u7684 fallbackModule\uFF1B\u539F\u59CB\u9519\u8BEF\uFF1A`,h),_({remote:t,error:h}),await r.fallbackModule();throw h}if(!n)return s;await te(a,s);let u=`${t}@${a.shareScope||"default"}#${n}`;g.has(u)||g.set(u,s.get(n).catch(h=>{throw g.delete(u),h instanceof S||h?.code?h:new S(E.REMOTE_LOAD_FAILED,`\u65E0\u6CD5\u4ECE\u8FDC\u7A0B\u5E94\u7528 "${t}" \u52A0\u8F7D\u6A21\u5757 "${n}"\u3002\u5E95\u5C42\u539F\u56E0\uFF1A${String(h?.message??h)}\u3002\u8BF7\u6838\u5BF9 exposes \u952E\u548C\u8FDC\u7A0B\u6784\u5EFA\u4EA7\u7269\u3002`,{remote:t,module:n})}));let p;try{p=await g.get(u)}catch(h){if(r?.fallbackModule)return console.error(`[fulgurjs] \u8FDC\u7A0B\u6A21\u5757 "${e}" \u52A0\u8F7D\u5931\u8D25\uFF0C\u6B63\u5728\u4F7F\u7528\u663E\u5F0F\u914D\u7F6E\u7684 fallbackModule\uFF1B\u539F\u59CB\u9519\u8BEF\uFF1A`,h),_({remote:t,error:h}),await r.fallbackModule();throw h}try{I.afterLoadRemote?.({remote:t,module:n,module_ns:p})}catch(h){console.warn("[fulgurjs] afterLoadRemote \u89C2\u6D4B\u94A9\u5B50\u6267\u884C\u5931\u8D25\uFF1B\u5DF2\u52A0\u8F7D\u6A21\u5757\u4ECD\u53EF\u4F7F\u7528\u3002\u8BF7\u68C0\u67E5\u8BE5\u94A9\u5B50\uFF1A",h)}if(p&&typeof p=="object"&&Object.keys(p).length===0){let h=new S(E.EMPTY_EXPORTS,`\u8FDC\u7A0B\u5E94\u7528 "${t}" \u7684\u6A21\u5757 "${n}" \u6CA1\u6709\u4EFB\u4F55\u5BFC\u51FA\u3002\u8BF7\u68C0\u67E5 exposes \u6307\u5411\u7684\u6587\u4EF6\u53CA\u5176 export \u58F0\u660E\u3002`,{remote:t,module:n});_({remote:t,error:h}),console.error(h.message)}return p}function me(e){let r=c.get(e);if(!r)throw new S(E.REMOTE_UNKNOWN,`\u672A\u77E5\u8FDC\u7A0B\u5E94\u7528 "${e}"\u3002\u8BF7\u5148\u6CE8\u518C\u8BE5\u8FDC\u7A0B\u5E94\u7528\u3002`,{remote:e});return X(r)}async function F(e,r={}){let{remote:t,module:n}=C(e),a=c.get(t);if(!a)throw new S(E.REMOTE_UNKNOWN,`\u672A\u77E5\u8FDC\u7A0B\u5E94\u7528 "${t}"\u3002\u8BF7\u5148\u6CE8\u518C\u8BE5\u8FDC\u7A0B\u5E94\u7528\u3002`,{remote:t});let s=r.mode??"preload",u=(d,R)=>{if(d.sheet)return Promise.resolve();let f=w.get(d);if(f)return f;let m=new Promise(v=>{let $=()=>{d.removeEventListener("load",$),d.removeEventListener("error",T),v()},T=()=>{_({remote:t,error:new S(E.PRELOAD_FAILED,`\u8FDC\u7A0B\u5E94\u7528 "${t}" \u7684\u6837\u5F0F\u8D44\u6E90\u52A0\u8F7D\u5931\u8D25\uFF1A${R}\u3002\u8BF7\u68C0\u67E5\u6587\u4EF6\u662F\u5426\u5B58\u5728\u4EE5\u53CA\u8DE8\u57DF\u548C\u7F13\u5B58\u914D\u7F6E\u3002`,{remote:t})}),$()};d.addEventListener("load",$,{once:!0}),d.addEventListener("error",T,{once:!0}),d.sheet&&$()});return w.set(d,m),m},p=(d,R)=>{if(typeof document>"u")return Promise.resolve();let f=document.querySelector(`link[href="${d}"]`);if(f)return R==="style"&&s==="preload"?w.get(f)??Promise.resolve():Promise.resolve();let m=document.createElement("link");m.rel=R==="style"?"stylesheet":"modulepreload",m.href=d,s==="prefetch"&&(m.fetchPriority="low");let v=R==="style"?u(m,d):Promise.resolve();return document.head.appendChild(m),R==="style"&&s==="preload"?v:Promise.resolve()},h=d=>{let R=typeof document<"u"?document.baseURI:void 0,f=new URL(a.entry,R||"http://fulgurjs.invalid/");return!f.pathname.endsWith("/")&&!f.pathname.split("/").pop().includes(".")&&(f.pathname+="/"),new URL(d,f).href};try{if(a.manifestUrl){let d=y.get(a.manifestUrl);d||(d=fetch(a.manifestUrl,{cache:"no-cache",signal:AbortSignal.timeout(8e3)}).then(f=>f.ok?f.json():void 0),y.set(a.manifestUrl,d),d.then(f=>{f||y.delete(a.manifestUrl)},()=>y.delete(a.manifestUrl)));let R=await d;if(R){let f=R.schemaVersion;if(typeof f=="number"&&(!Number.isInteger(f)||f>1)){_({remote:t,error:new S(E.PRELOAD_FAILED,`\u8FDC\u7A0B\u5E94\u7528 "${t}" \u7684 manifest \u534F\u8BAE\u7248\u672C\u4E3A ${String(f)}\uFF0C\u5F53\u524D\u4EC5\u652F\u6301\u7248\u672C 1\u3002\u8BF7\u7EDF\u4E00\u5BBF\u4E3B\u548C\u8FDC\u7A0B\u7684\u63D2\u4EF6\u7248\u672C\u3002`,{remote:t})}),await p(a.entry,"modulepreload");return}await p(a.entry,"modulepreload");let m=R.exposes,v=Array.isArray(m)?m.filter(M=>M&&typeof M=="object").map(M=>[String(M.name??""),M]):m&&typeof m=="object"?Object.entries(m):[],$=n?v.filter(([M,x])=>B(String(x?.name??M))===n):v,T=[];for(let[,M]of $)if(typeof M?.file=="string"&&await p(h(M.file),"modulepreload"),Array.isArray(M?.css))for(let x of M.css){if(typeof x!="string")continue;let pe=p(h(x),"style");s==="preload"&&T.push(pe)}await Promise.all(T);return}}await p(a.entry,"modulepreload")}catch(d){_({remote:t,error:new S(E.PRELOAD_FAILED,`\u8FDC\u7A0B\u5E94\u7528 "${t}" \u9884\u52A0\u8F7D\u5931\u8D25\u3002\u5E95\u5C42\u539F\u56E0\uFF1A${String(d?.message??d)}\u3002\u8BF7\u68C0\u67E5 manifest \u548C\u8D44\u6E90\u5730\u5740\u3002`,{remote:t})})}}return typeof window>"u"||(window.__FULGURJS_SCOPE__=i,window.__FULGURJS_INFO__={get remotes(){let e={};for(let[r,t]of c)e[r]={...t.debug,entry:t.entry};return e},errors:[]}),{shareScopeMap:i,initSharing:oe,registerShare:se,registerRemotes:H,registerRemote:ae,registerPlugins:ce,loadShare:le,loadRemote:fe,getContainer:me,preloadRemote:F,parseSpec:C,clearSessionState:ne}}var Y=globalThis,P=Y.__FULGURJS_RUNTIME__??Oe();Y.__FULGURJS_RUNTIME__=P;try{Object.freeze(P)}catch{}var Ce=W;function Fe(){return P}var De=P.initSharing,Ve=P.registerShare,Ke=P.registerRemotes,He=P.registerRemote,qe=P.registerPlugins,Ge=P.loadShare,Je=P.loadRemote,Xe=P.getContainer,Be=P.preloadRemote,We=P.parseSpec,ze=P.clearSessionState,Ye=P.shareScopeMap;function Ze(i){if(i&&typeof i=="object"&&"default"in i){let c=i.default;return c!==void 0?c:i}return i}var Qe=P;export{ze as clearSessionState,Qe as default,Xe as getContainer,Fe as getRuntime,De as initSharing,Je as loadRemote,Ge as loadShare,We as parseSpec,Be as preloadRemote,qe as registerPlugins,He as registerRemote,Ke as registerRemotes,Ve as registerShare,P as runtime,Ye as shareScopeMap,Ze as unwrapDefault,Ce as version};
|
package/dist/vue-adapter.cjs
CHANGED
|
@@ -216,7 +216,7 @@ function createHostPages(options, load) {
|
|
|
216
216
|
if (route.startsWith(prefix) || `${route}/` === prefix) return name;
|
|
217
217
|
}
|
|
218
218
|
throw new Error(
|
|
219
|
-
`[fulgurjs]
|
|
219
|
+
`[fulgurjs] \u9875\u9762\u8DEF\u7531 "${route}" \u672A\u5339\u914D\u4EFB\u4F55 remotePrefixes\uFF1A{ ${Object.entries(remotePrefixes).map(([k, v]) => `'${k}': '${v}'`).join(", ")} }
|
|
220
220
|
\u6839\u56E0: \u9875\u9762\u8868\u6761\u76EE\u7684\u8DEF\u7531\u4E0D\u5728\u4EFB\u4F55\u5DF2\u58F0\u660E\u7684\u8FDC\u7A0B\u524D\u7F00\u4E0B\u3002
|
|
221
221
|
\u4FEE\u6CD5: \u5728 remotePrefixes \u8865\u5145\u8BE5\u8DEF\u7531\u524D\u7F00 \u2192 \u8FDC\u7A0B\u540D\u7684\u6620\u5C04\uFF0C\u6216\u4FEE\u6B63\u9875\u9762\u8868 route\u3002`
|
|
222
222
|
);
|
|
@@ -263,8 +263,8 @@ function createHostPages(options, load) {
|
|
|
263
263
|
};
|
|
264
264
|
const component = (spec) => {
|
|
265
265
|
const sk = (globalThis.__FULGURJS_APP_CONFIG__ ?? {}).sessionKey;
|
|
266
|
-
const sessionKey = typeof sk === "string" ? sk : void 0;
|
|
267
|
-
if (sessionKey !== cacheSession) {
|
|
266
|
+
const sessionKey = typeof sk === "string" && sk !== "" ? sk : void 0;
|
|
267
|
+
if (sessionKey !== void 0 && sessionKey !== cacheSession) {
|
|
268
268
|
compCache.clear();
|
|
269
269
|
cacheSession = sessionKey;
|
|
270
270
|
}
|
|
@@ -278,7 +278,7 @@ function createHostPages(options, load) {
|
|
|
278
278
|
const inner = mod?.default ?? mod;
|
|
279
279
|
if (!inner) {
|
|
280
280
|
throw new Error(
|
|
281
|
-
`[fulgurjs]
|
|
281
|
+
`[fulgurjs] \u8FDC\u7A0B\u6A21\u5757 "${spec}" \u6CA1\u6709\u5BFC\u51FA\u53EF\u6E32\u67D3\u7EC4\u4EF6\uFF1B\u5F53\u524D\u503C\u7C7B\u578B\u4E3A ${inner === null ? "null" : typeof inner}\u3002
|
|
282
282
|
\u4FEE\u6CD5: \u6838\u5BF9\u8FDC\u7A0B exposes \u952E\u540D\u4E0E\u9875\u9762\u8868 spec \u662F\u5426\u4E00\u81F4\uFF08MFU-006 \u8BED\u4E49\uFF09`
|
|
283
283
|
);
|
|
284
284
|
}
|
|
@@ -288,11 +288,8 @@ function createHostPages(options, load) {
|
|
|
288
288
|
errorComponent: errorComponent ?? RemoteErrorPlaceholder,
|
|
289
289
|
delay
|
|
290
290
|
});
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
inheritAttrs: false,
|
|
294
|
-
setup: (_props, ctx) => () => (0, import_vue.h)(asyncComp, ctx.attrs, ctx.slots)
|
|
295
|
-
});
|
|
291
|
+
asyncComp.name = name;
|
|
292
|
+
comp = asyncComp;
|
|
296
293
|
compCache.set(spec, comp);
|
|
297
294
|
}
|
|
298
295
|
return comp;
|
package/dist/vue-adapter.js
CHANGED
package/dist/vue.cjs
CHANGED
|
@@ -278,6 +278,7 @@ function createRuntime() {
|
|
|
278
278
|
const shareScopeMap2 = /* @__PURE__ */ Object.create(null);
|
|
279
279
|
const remotes = /* @__PURE__ */ new Map();
|
|
280
280
|
const plugins = [];
|
|
281
|
+
const reportedSingletonSkews = /* @__PURE__ */ new Set();
|
|
281
282
|
const loadedModules = /* @__PURE__ */ new Map();
|
|
282
283
|
const remoteManifests = /* @__PURE__ */ new Map();
|
|
283
284
|
const stylesheetLoads = /* @__PURE__ */ new WeakMap();
|
|
@@ -288,7 +289,7 @@ function createRuntime() {
|
|
|
288
289
|
try {
|
|
289
290
|
p.init?.(hooks);
|
|
290
291
|
} catch (err) {
|
|
291
|
-
console.warn("[fulgurjs]
|
|
292
|
+
console.warn("[fulgurjs] \u8FD0\u884C\u65F6\u6269\u5C55\u521D\u59CB\u5316\u5931\u8D25\uFF0C\u8BE5\u6269\u5C55\u5C06\u4E0D\u53EF\u7528\uFF1A", p.name, err);
|
|
292
293
|
}
|
|
293
294
|
}
|
|
294
295
|
};
|
|
@@ -305,8 +306,9 @@ function createRuntime() {
|
|
|
305
306
|
if (err instanceof FgError) return err;
|
|
306
307
|
return new FgError(
|
|
307
308
|
ErrorCodes.SETUP_RUN_FAILED,
|
|
308
|
-
|
|
309
|
-
|
|
309
|
+
`\u73B0\u8C61\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${remoteName}" \u7684 ${phase} \u521D\u59CB\u5316\u5931\u8D25\u3002
|
|
310
|
+
\u539F\u56E0\uFF1A${String(err?.message ?? err)}
|
|
311
|
+
\u4FEE\u6CD5\uFF1A\u68C0\u67E5\u5E76\u4FEE\u590D\u8BE5 ${phase} \u51FD\u6570\u540E\u91CD\u65B0\u52A0\u8F7D\uFF1B\u5931\u8D25\u7F13\u5B58\u5DF2\u6E05\u9664\uFF0C\u53EF\u4EE5\u76F4\u63A5\u91CD\u8BD5\u3002`,
|
|
310
312
|
{ remote: remoteName, phase }
|
|
311
313
|
);
|
|
312
314
|
};
|
|
@@ -339,17 +341,18 @@ function createRuntime() {
|
|
|
339
341
|
if (typeof setupFn !== "function") {
|
|
340
342
|
throw new FgError(
|
|
341
343
|
ErrorCodes.SETUP_INVALID_EXPORT,
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
344
|
+
`\u73B0\u8C61\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${remote.name}" \u7684 setup \u6A21\u5757 "${setupKey}" \u65E0\u6CD5\u521D\u59CB\u5316\u3002
|
|
345
|
+
\u539F\u56E0\uFF1A\u9ED8\u8BA4\u5BFC\u51FA\u7C7B\u578B\u4E3A ${mod == null ? String(mod) : typeof setupFn}\uFF0C\u5E94\u4E3A\u51FD\u6570\u3002
|
|
346
|
+
\u4FEE\u6CD5\uFF1A\u5728 setup \u6307\u5411\u7684\u6587\u4EF6\u4E2D\u9ED8\u8BA4\u5BFC\u51FA\u51FD\u6570\uFF0C\u4F8B\u5982 export default async function setup(context) { ... }\uFF1B\u5177\u540D onSession \u53EF\u9009\u3002`,
|
|
345
347
|
{ remote: remote.name, module: setupKey }
|
|
346
348
|
);
|
|
347
349
|
}
|
|
348
350
|
if (mod.onSession !== void 0 && typeof mod.onSession !== "function") {
|
|
349
351
|
throw new FgError(
|
|
350
352
|
ErrorCodes.SETUP_INVALID_EXPORT,
|
|
351
|
-
|
|
352
|
-
|
|
353
|
+
`\u73B0\u8C61\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${remote.name}" \u7684 setup \u6A21\u5757 "${setupKey}" \u65E0\u6CD5\u521D\u59CB\u5316\u3002
|
|
354
|
+
\u539F\u56E0\uFF1AonSession \u5BFC\u51FA\u7C7B\u578B\u4E3A ${typeof mod.onSession}\uFF0C\u5E94\u4E3A\u51FD\u6570\u3002
|
|
355
|
+
\u4FEE\u6CD5\uFF1A\u5C06 onSession \u6539\u4E3A\u5177\u540D\u5BFC\u51FA\u7684\u51FD\u6570\uFF0C\u6216\u5220\u9664\u8BE5\u5BFC\u51FA\u3002`,
|
|
353
356
|
{ remote: remote.name, module: setupKey }
|
|
354
357
|
);
|
|
355
358
|
}
|
|
@@ -373,9 +376,9 @@ function createRuntime() {
|
|
|
373
376
|
if (typeof sessionKey !== "string" || sessionKey === "") {
|
|
374
377
|
throw new FgError(
|
|
375
378
|
ErrorCodes.SETUP_SESSION_KEY_MISSING,
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
+
`\u73B0\u8C61\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${remote.name}" \u58F0\u660E\u4E86 onSession\uFF0C\u4F46\u5BBF\u4E3B\u5C1A\u672A\u63D0\u4F9B\u6709\u6548\u7684 AppContext.sessionKey\u3002
|
|
380
|
+
\u539F\u56E0\uFF1A\u5F53\u524D\u503C\u4E3A ${sessionKey === void 0 ? "\u7F3A\u5931" : JSON.stringify(sessionKey)}\u3002
|
|
381
|
+
\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`,
|
|
379
382
|
{ remote: remote.name }
|
|
380
383
|
);
|
|
381
384
|
}
|
|
@@ -459,7 +462,7 @@ function createRuntime() {
|
|
|
459
462
|
const ok = typeof v === "number" && (int10 ? Number.isInteger(v) && v >= 0 && v <= 10 : Number.isFinite(v) && v > 0);
|
|
460
463
|
if (!ok) {
|
|
461
464
|
throw new Error(
|
|
462
|
-
`[fulgurjs]
|
|
465
|
+
`[fulgurjs] \u8FDC\u7A0B\u5E94\u7528 "${r.name}" \u7684 ${name} \u914D\u7F6E\u65E0\u6548\uFF1A\u5F53\u524D\u4E3A ${String(v)}\uFF0C\u5E94\u4E3A${int10 ? " 0 \u5230 10 \u7684\u6574\u6570" : "\u5927\u4E8E 0 \u7684\u6709\u9650\u6570\u5B57"}\u3002\u8BF7\u4FEE\u6B63 registerRemote \u914D\u7F6E\u3002`
|
|
463
466
|
);
|
|
464
467
|
}
|
|
465
468
|
};
|
|
@@ -510,9 +513,12 @@ function createRuntime() {
|
|
|
510
513
|
if (opts.singleton && versions.length > 0) {
|
|
511
514
|
const loadedVersions = versions.filter((v) => byName[v].loaded);
|
|
512
515
|
pick = [...loadedVersions.length ? loadedVersions : versions].sort(compareVersions).pop();
|
|
513
|
-
if (
|
|
516
|
+
if (!satisfying.includes(pick)) {
|
|
514
517
|
const entry0 = byName[pick];
|
|
515
|
-
const msg =
|
|
518
|
+
const msg = `\u73B0\u8C61\uFF1A\u5171\u4EAB\u5355\u4F8B "${shareKey}" \u7684\u5B9E\u9645\u7248\u672C\u4E0D\u6EE1\u8DB3\u5F53\u524D\u5E94\u7528\u8981\u6C42\u3002
|
|
519
|
+
\u539F\u56E0\uFF1A\u5E94\u7528\u8981\u6C42 ${req ?? "\u4EFB\u610F\u7248\u672C"}\uFF0C\u4F5C\u7528\u57DF\u4E2D\u6709 ${versions.join("\u3001")}\uFF1B\u4E3A\u4FDD\u8BC1\u5168\u9875\u53EA\u4F7F\u7528\u4E00\u4E2A\u5B9E\u4F8B\uFF0C\u6700\u7EC8\u590D\u7528 ${entry0.from} \u63D0\u4F9B\u7684 ${pick}\u3002
|
|
520
|
+
\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
|
|
521
|
+
\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`;
|
|
516
522
|
if (opts.strictVersion) {
|
|
517
523
|
const err = new FgError(ErrorCodes.SHARE_STRICT_VERSION, msg, {
|
|
518
524
|
shareKey,
|
|
@@ -521,7 +527,11 @@ function createRuntime() {
|
|
|
521
527
|
emitError({ remote: entry0.from, error: err });
|
|
522
528
|
throw err;
|
|
523
529
|
}
|
|
524
|
-
|
|
530
|
+
const warningKey = `${scopeName}|${shareKey}|${req ?? "*"}|${pick}|${versions.join(",")}`;
|
|
531
|
+
if (!reportedSingletonSkews.has(warningKey)) {
|
|
532
|
+
reportedSingletonSkews.add(warningKey);
|
|
533
|
+
console.warn(`[fulgurjs:MFU-010] ${msg}`);
|
|
534
|
+
}
|
|
525
535
|
}
|
|
526
536
|
} else {
|
|
527
537
|
pick = [...satisfying].sort(compareVersions).pop();
|
|
@@ -529,7 +539,9 @@ function createRuntime() {
|
|
|
529
539
|
if (opts.strictVersion) {
|
|
530
540
|
const err2 = new FgError(
|
|
531
541
|
ErrorCodes.SHARE_STRICT_VERSION,
|
|
532
|
-
|
|
542
|
+
`\u73B0\u8C61\uFF1A\u5171\u4EAB\u4F5C\u7528\u57DF "${scopeName}" \u4E2D\u627E\u4E0D\u5230\u7B26\u5408\u8981\u6C42\u7684 "${shareKey}"\u3002
|
|
543
|
+
\u539F\u56E0\uFF1A\u8981\u6C42\u7248\u672C ${req}\uFF0C\u5F53\u524D\u53EF\u7528\u7248\u672C\u4E3A ${versions.join("\u3001") || "\u65E0"}\u3002
|
|
544
|
+
\u4FEE\u6CD5\uFF1A\u7EDF\u4E00\u5BBF\u4E3B\u4E0E\u8FDC\u7A0B\u7684\u4F9D\u8D56\u7248\u672C\uFF0C\u6216\u4FEE\u6B63 shared.requiredVersion\u3002`
|
|
533
545
|
);
|
|
534
546
|
emitError({ remote: shareKey, error: err2 });
|
|
535
547
|
throw err2;
|
|
@@ -537,7 +549,9 @@ function createRuntime() {
|
|
|
537
549
|
if (opts.fallback) return opts.fallback();
|
|
538
550
|
const err = new FgError(
|
|
539
551
|
ErrorCodes.SHARE_NOT_AVAILABLE,
|
|
540
|
-
|
|
552
|
+
`\u73B0\u8C61\uFF1A\u65E0\u6CD5\u52A0\u8F7D\u5171\u4EAB\u4F9D\u8D56 "${shareKey}"\u3002
|
|
553
|
+
\u539F\u56E0\uFF1A\u4F5C\u7528\u57DF "${scopeName}" \u4E2D\u6CA1\u6709\u7B26\u5408 ${req ?? "\u4EFB\u610F\u7248\u672C"} \u8981\u6C42\u7684\u7248\u672C\uFF0C\u4E14\u672A\u914D\u7F6E\u672C\u5730\u526F\u672C\u3002
|
|
554
|
+
\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`,
|
|
541
555
|
{ shareKey, requiredVersion: req }
|
|
542
556
|
);
|
|
543
557
|
emitError({ remote: shareKey, error: err });
|
|
@@ -568,7 +582,7 @@ function createRuntime() {
|
|
|
568
582
|
}
|
|
569
583
|
function withTimeout(p, ms, label) {
|
|
570
584
|
return new Promise((resolve, reject) => {
|
|
571
|
-
const t = setTimeout(() => reject(new Error(
|
|
585
|
+
const t = setTimeout(() => reject(new Error(`\u7B49\u5F85\u8D85\u8FC7 ${ms} \u6BEB\u79D2\uFF1A${label}`)), ms);
|
|
572
586
|
p.then(
|
|
573
587
|
(v) => {
|
|
574
588
|
clearTimeout(t);
|
|
@@ -585,13 +599,13 @@ function createRuntime() {
|
|
|
585
599
|
function validateContainerInterface(container, remote) {
|
|
586
600
|
if (!container || typeof container.get !== "function") {
|
|
587
601
|
throw new Error(
|
|
588
|
-
|
|
602
|
+
`\u8FDC\u7A0B\u5E94\u7528 "${remote.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`
|
|
589
603
|
);
|
|
590
604
|
}
|
|
591
605
|
if (container.name && remote.name && container.name !== remote.name) {
|
|
592
|
-
const msg =
|
|
606
|
+
const msg = `\u8FDC\u7A0B\u5165\u53E3\u81EA\u62A5\u540D\u79F0 "${container.name}" \u4E0E\u5BBF\u4E3B\u914D\u7F6E\u540D\u79F0 "${remote.name}" \u4E0D\u4E00\u81F4\u3002\u8BF7\u7EDF\u4E00\u4E24\u4FA7 federation({ name }) \u4E0E remotes \u7684\u540D\u79F0\u3002`;
|
|
593
607
|
if (remote.promise) {
|
|
594
|
-
console.warn(`[fulgurjs] ${msg}
|
|
608
|
+
console.warn(`[fulgurjs] ${msg} \u5F53\u524D\u662F\u52A8\u6001 Promise \u8FDC\u7A0B\uFF0C\u7EE7\u7EED\u52A0\u8F7D\u3002`);
|
|
595
609
|
} else {
|
|
596
610
|
throw Object.assign(new Error(msg), { code: ErrorCodes.REMOTE_NAME_MISMATCH });
|
|
597
611
|
}
|
|
@@ -607,7 +621,7 @@ function createRuntime() {
|
|
|
607
621
|
remote.entryInflight.set(url, inflight);
|
|
608
622
|
inflight.catch(() => remote.entryInflight.delete(url));
|
|
609
623
|
}
|
|
610
|
-
return withTimeout(inflight, remote.timeout ?? DEFAULT_TIMEOUT,
|
|
624
|
+
return withTimeout(inflight, remote.timeout ?? DEFAULT_TIMEOUT, `\u52A0\u8F7D\u8FDC\u7A0B\u5165\u53E3 ${sanitizeUrl(url)}`);
|
|
611
625
|
}
|
|
612
626
|
async function acquireContainer(remote, overrides) {
|
|
613
627
|
const scopeKey = remote.shareScope || "default";
|
|
@@ -616,7 +630,7 @@ function createRuntime() {
|
|
|
616
630
|
if (prevScope && prevScope !== scopeKey) {
|
|
617
631
|
throw new FgError(
|
|
618
632
|
ErrorCodes.CONTAINER_REINIT_CONFLICT,
|
|
619
|
-
|
|
633
|
+
`\u8FDC\u7A0B\u5BB9\u5668 "${remote.name}" \u5DF2\u4F7F\u7528\u5171\u4EAB\u4F5C\u7528\u57DF "${prevScope}" \u521D\u59CB\u5316\uFF0C\u4E0D\u80FD\u518D\u4EE5 "${scopeKey}" \u521D\u59CB\u5316\u3002\u8BF7\u7EDF\u4E00 shareScope \u914D\u7F6E\u3002`
|
|
620
634
|
);
|
|
621
635
|
}
|
|
622
636
|
return remote.container;
|
|
@@ -626,7 +640,7 @@ function createRuntime() {
|
|
|
626
640
|
if (b.openUntil > Date.now()) {
|
|
627
641
|
const err = new FgError(
|
|
628
642
|
ErrorCodes.REMOTE_LOAD_FAILED,
|
|
629
|
-
|
|
643
|
+
`\u8FDC\u7A0B\u5E94\u7528 "${remote.name}" \u8FDE\u7EED\u52A0\u8F7D\u5931\u8D25\uFF0C\u7194\u65AD\u5668\u5DF2\u5F00\u542F\uFF1B\u5C06\u5728 ${new Date(b.openUntil).toISOString()} \u540E\u5141\u8BB8\u91CD\u8BD5\u3002\u8BF7\u5148\u68C0\u67E5\u8FDC\u7A0B\u5165\u53E3\u670D\u52A1\u548C\u7F51\u7EDC\u3002`,
|
|
630
644
|
{ remote: remote.name }
|
|
631
645
|
);
|
|
632
646
|
emitError({ remote: remote.name, error: err });
|
|
@@ -641,7 +655,7 @@ function createRuntime() {
|
|
|
641
655
|
const resolved = await withTimeout(
|
|
642
656
|
remote.promise(),
|
|
643
657
|
remote.timeout ?? DEFAULT_TIMEOUT,
|
|
644
|
-
|
|
658
|
+
`\u89E3\u6790\u52A8\u6001\u8FDC\u7A0B\u5E94\u7528 "${remote.name}"`
|
|
645
659
|
);
|
|
646
660
|
const container2 = typeof resolved === "string" ? await importEntry(resolved, remote) : resolved;
|
|
647
661
|
validateContainerInterface(container2, remote);
|
|
@@ -683,17 +697,19 @@ function createRuntime() {
|
|
|
683
697
|
const shown = sanitizeUrl(remote.entry);
|
|
684
698
|
const hints = [];
|
|
685
699
|
if (/^https?:\/\//.test(remote.entry) && typeof location !== "undefined") {
|
|
686
|
-
hints.push(`1.
|
|
687
|
-
hints.push(`2.
|
|
688
|
-
hints.push(`3.
|
|
700
|
+
hints.push(`1. \u5728\u6D4F\u89C8\u5668\u6253\u5F00 ${shown}\uFF0C\u786E\u8BA4\u8FDC\u7A0B\u5F00\u53D1\u670D\u52A1\u5DF2\u542F\u52A8\uFF0C\u5E76\u8FD4\u56DE JS \u800C\u975E HTML\u3002`);
|
|
701
|
+
hints.push(`2. \u6838\u5BF9 federation({ remotes }) \u4E2D\u7684\u5730\u5740\uFF1B\u5F00\u53D1\u548C\u751F\u4EA7\u5730\u5740\u53EF\u4EE5\u4E0D\u540C\u3002`);
|
|
702
|
+
hints.push(`3. \u82E5\u8DE8\u57DF\uFF0C\u68C0\u67E5\u8FDC\u7A0B\u5F00\u53D1\u670D\u52A1\u7684 server.cors \u914D\u7F6E\u3002`);
|
|
689
703
|
} else {
|
|
690
|
-
hints.push(`1.
|
|
691
|
-
hints.push(`2.
|
|
704
|
+
hints.push(`1. \u5728\u6D4F\u89C8\u5668\u6253\u5F00 ${shown}\uFF0C\u786E\u8BA4\u8FDC\u7A0B\u5E94\u7528\u5DF2\u90E8\u7F72\uFF0C\u4E14\u5165\u53E3\u8FD4\u56DE JS\u3002`);
|
|
705
|
+
hints.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`);
|
|
692
706
|
}
|
|
693
707
|
throw new FgError(
|
|
694
708
|
ErrorCodes.REMOTE_LOAD_FAILED,
|
|
695
|
-
|
|
696
|
-
|
|
709
|
+
`\u73B0\u8C61\uFF1A\u65E0\u6CD5\u4ECE ${shown} \u52A0\u8F7D\u8FDC\u7A0B\u5E94\u7528 "${remote.name}"\u3002
|
|
710
|
+
\u539F\u56E0\uFF1A${String(lastErr?.message ?? lastErr)}
|
|
711
|
+
\u4FEE\u6CD5\uFF1A
|
|
712
|
+
${hints.join("\n")}`,
|
|
697
713
|
{ remote: remote.name }
|
|
698
714
|
);
|
|
699
715
|
}
|
|
@@ -702,7 +718,7 @@ function createRuntime() {
|
|
|
702
718
|
if (prevScope && prevScope !== scopeKey) {
|
|
703
719
|
throw new FgError(
|
|
704
720
|
ErrorCodes.CONTAINER_REINIT_CONFLICT,
|
|
705
|
-
|
|
721
|
+
`\u8FDC\u7A0B\u5BB9\u5668 "${remote.name}" \u5DF2\u4F7F\u7528\u5171\u4EAB\u4F5C\u7528\u57DF "${prevScope}" \u521D\u59CB\u5316\uFF0C\u4E0D\u80FD\u518D\u4EE5 "${scopeKey}" \u521D\u59CB\u5316\u3002\u8BF7\u7EDF\u4E00 shareScope \u914D\u7F6E\u3002`
|
|
706
722
|
);
|
|
707
723
|
}
|
|
708
724
|
if (typeof container.init === "function") {
|
|
@@ -736,7 +752,7 @@ function createRuntime() {
|
|
|
736
752
|
emitError({ remote: remote.name, error: err });
|
|
737
753
|
throw err;
|
|
738
754
|
}
|
|
739
|
-
const wrapped = new FgError(ErrorCodes.REMOTE_LOAD_FAILED, String(err?.message ?? err)
|
|
755
|
+
const wrapped = new FgError(ErrorCodes.REMOTE_LOAD_FAILED, `\u8FDC\u7A0B\u5E94\u7528 "${remote.name}" \u52A0\u8F7D\u5931\u8D25\u3002\u5E95\u5C42\u539F\u56E0\uFF1A${String(err?.message ?? err)}\u3002\u8BF7\u68C0\u67E5\u8FDC\u7A0B\u5165\u53E3\u3001\u7F51\u7EDC\u53CA\u5171\u4EAB\u4F9D\u8D56\u3002`, {
|
|
740
756
|
remote: remote.name
|
|
741
757
|
});
|
|
742
758
|
emitError({ remote: remote.name, error: wrapped });
|
|
@@ -757,21 +773,22 @@ function createRuntime() {
|
|
|
757
773
|
if (module2 && lifecycleSyncRemote === name) {
|
|
758
774
|
throw new FgError(
|
|
759
775
|
ErrorCodes.SETUP_RECURSION,
|
|
760
|
-
|
|
761
|
-
|
|
776
|
+
`\u73B0\u8C61\uFF1A\u52A0\u8F7D "${spec}" \u65F6\uFF0C\u8FDC\u7A0B\u5E94\u7528 "${name}" \u7684 setup/onSession \u53C8\u540C\u6B65\u52A0\u8F7D\u4E86\u81EA\u8EAB\u6A21\u5757\uFF0C\u5F62\u6210\u5FAA\u73AF\u7B49\u5F85\u3002
|
|
777
|
+
\u539F\u56E0\uFF1A\u521D\u59CB\u5316\u5C1A\u672A\u5B8C\u6210\uFF0C\u4E0D\u80FD\u7B49\u5F85\u81EA\u8EAB\u7684\u521D\u59CB\u5316\u7ED3\u679C\u3002
|
|
778
|
+
\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`,
|
|
762
779
|
{ remote: name }
|
|
763
780
|
);
|
|
764
781
|
}
|
|
765
782
|
try {
|
|
766
783
|
hooks.beforeLoadRemote?.({ remote: name, module: module2 });
|
|
767
784
|
} catch (hookErr) {
|
|
768
|
-
console.warn("[fulgurjs] beforeLoadRemote
|
|
785
|
+
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", hookErr);
|
|
769
786
|
}
|
|
770
787
|
const remote = remotes.get(name);
|
|
771
788
|
if (!remote) {
|
|
772
789
|
throw new FgError(
|
|
773
790
|
ErrorCodes.REMOTE_UNKNOWN,
|
|
774
|
-
|
|
791
|
+
`\u672A\u77E5\u8FDC\u7A0B\u5E94\u7528 "${name}"\u3002\u8BF7\u5728 federation({ remotes }) \u4E2D\u914D\u7F6E\uFF0C\u6216\u5728\u52A0\u8F7D\u524D\u8C03\u7528 registerRemote()\u3002`,
|
|
775
792
|
{ remote: name }
|
|
776
793
|
);
|
|
777
794
|
}
|
|
@@ -781,7 +798,7 @@ function createRuntime() {
|
|
|
781
798
|
[container] = await Promise.all([acquireContainer(remote, { retries: opts?.retries }), stylesReady]);
|
|
782
799
|
} catch (err) {
|
|
783
800
|
if (opts?.fallbackModule) {
|
|
784
|
-
console.error(`[fulgurjs]
|
|
801
|
+
console.error(`[fulgurjs] \u8FDC\u7A0B\u6A21\u5757 "${spec}" \u52A0\u8F7D\u5931\u8D25\uFF0C\u6B63\u5728\u4F7F\u7528\u663E\u5F0F\u914D\u7F6E\u7684 fallbackModule\uFF1B\u539F\u59CB\u9519\u8BEF\uFF1A`, err);
|
|
785
802
|
emitError({ remote: name, error: err });
|
|
786
803
|
return await opts.fallbackModule();
|
|
787
804
|
}
|
|
@@ -798,7 +815,7 @@ function createRuntime() {
|
|
|
798
815
|
if (err instanceof FgError || err?.code) throw err;
|
|
799
816
|
throw new FgError(
|
|
800
817
|
ErrorCodes.REMOTE_LOAD_FAILED,
|
|
801
|
-
|
|
818
|
+
`\u65E0\u6CD5\u4ECE\u8FDC\u7A0B\u5E94\u7528 "${name}" \u52A0\u8F7D\u6A21\u5757 "${module2}"\u3002\u5E95\u5C42\u539F\u56E0\uFF1A${String(err?.message ?? err)}\u3002\u8BF7\u6838\u5BF9 exposes \u952E\u548C\u8FDC\u7A0B\u6784\u5EFA\u4EA7\u7269\u3002`,
|
|
802
819
|
{ remote: name, module: module2 }
|
|
803
820
|
);
|
|
804
821
|
})
|
|
@@ -809,7 +826,7 @@ function createRuntime() {
|
|
|
809
826
|
ns = await loadedModules.get(cacheKey);
|
|
810
827
|
} catch (err) {
|
|
811
828
|
if (opts?.fallbackModule) {
|
|
812
|
-
console.error(`[fulgurjs]
|
|
829
|
+
console.error(`[fulgurjs] \u8FDC\u7A0B\u6A21\u5757 "${spec}" \u52A0\u8F7D\u5931\u8D25\uFF0C\u6B63\u5728\u4F7F\u7528\u663E\u5F0F\u914D\u7F6E\u7684 fallbackModule\uFF1B\u539F\u59CB\u9519\u8BEF\uFF1A`, err);
|
|
813
830
|
emitError({ remote: name, error: err });
|
|
814
831
|
return await opts.fallbackModule();
|
|
815
832
|
}
|
|
@@ -818,23 +835,23 @@ function createRuntime() {
|
|
|
818
835
|
try {
|
|
819
836
|
hooks.afterLoadRemote?.({ remote: name, module: module2, module_ns: ns });
|
|
820
837
|
} catch (hookErr) {
|
|
821
|
-
console.warn("[fulgurjs] afterLoadRemote
|
|
838
|
+
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", hookErr);
|
|
822
839
|
}
|
|
823
840
|
if (ns && typeof ns === "object" && Object.keys(ns).length === 0) {
|
|
824
841
|
const err = new FgError(
|
|
825
842
|
ErrorCodes.EMPTY_EXPORTS,
|
|
826
|
-
|
|
843
|
+
`\u8FDC\u7A0B\u5E94\u7528 "${name}" \u7684\u6A21\u5757 "${module2}" \u6CA1\u6709\u4EFB\u4F55\u5BFC\u51FA\u3002\u8BF7\u68C0\u67E5 exposes \u6307\u5411\u7684\u6587\u4EF6\u53CA\u5176 export \u58F0\u660E\u3002`,
|
|
827
844
|
{ remote: name, module: module2 }
|
|
828
845
|
);
|
|
829
846
|
emitError({ remote: name, error: err });
|
|
830
|
-
console.error(
|
|
847
|
+
console.error(err.message);
|
|
831
848
|
}
|
|
832
849
|
return ns;
|
|
833
850
|
}
|
|
834
851
|
function getContainer2(name) {
|
|
835
852
|
const remote = remotes.get(name);
|
|
836
853
|
if (!remote) {
|
|
837
|
-
throw new FgError(ErrorCodes.REMOTE_UNKNOWN,
|
|
854
|
+
throw new FgError(ErrorCodes.REMOTE_UNKNOWN, `\u672A\u77E5\u8FDC\u7A0B\u5E94\u7528 "${name}"\u3002\u8BF7\u5148\u6CE8\u518C\u8BE5\u8FDC\u7A0B\u5E94\u7528\u3002`, { remote: name });
|
|
838
855
|
}
|
|
839
856
|
return acquireContainer(remote);
|
|
840
857
|
}
|
|
@@ -842,7 +859,7 @@ function createRuntime() {
|
|
|
842
859
|
const { remote: name, module: module2 } = parseSpec2(spec);
|
|
843
860
|
const remote = remotes.get(name);
|
|
844
861
|
if (!remote) {
|
|
845
|
-
throw new FgError(ErrorCodes.REMOTE_UNKNOWN,
|
|
862
|
+
throw new FgError(ErrorCodes.REMOTE_UNKNOWN, `\u672A\u77E5\u8FDC\u7A0B\u5E94\u7528 "${name}"\u3002\u8BF7\u5148\u6CE8\u518C\u8BE5\u8FDC\u7A0B\u5E94\u7528\u3002`, { remote: name });
|
|
846
863
|
}
|
|
847
864
|
const mode = opts.mode ?? "preload";
|
|
848
865
|
const waitForStylesheet = (link, href) => {
|
|
@@ -858,7 +875,7 @@ function createRuntime() {
|
|
|
858
875
|
const failed = () => {
|
|
859
876
|
emitError({
|
|
860
877
|
remote: name,
|
|
861
|
-
error: new FgError(ErrorCodes.PRELOAD_FAILED,
|
|
878
|
+
error: new FgError(ErrorCodes.PRELOAD_FAILED, `\u8FDC\u7A0B\u5E94\u7528 "${name}" \u7684\u6837\u5F0F\u8D44\u6E90\u52A0\u8F7D\u5931\u8D25\uFF1A${href}\u3002\u8BF7\u68C0\u67E5\u6587\u4EF6\u662F\u5426\u5B58\u5728\u4EE5\u53CA\u8DE8\u57DF\u548C\u7F13\u5B58\u914D\u7F6E\u3002`, {
|
|
862
879
|
remote: name
|
|
863
880
|
})
|
|
864
881
|
});
|
|
@@ -918,7 +935,7 @@ function createRuntime() {
|
|
|
918
935
|
if (typeof sv === "number" && (!Number.isInteger(sv) || sv > 1)) {
|
|
919
936
|
emitError({
|
|
920
937
|
remote: name,
|
|
921
|
-
error: new FgError(ErrorCodes.PRELOAD_FAILED,
|
|
938
|
+
error: new FgError(ErrorCodes.PRELOAD_FAILED, `\u8FDC\u7A0B\u5E94\u7528 "${name}" \u7684 manifest \u534F\u8BAE\u7248\u672C\u4E3A ${String(sv)}\uFF0C\u5F53\u524D\u4EC5\u652F\u6301\u7248\u672C 1\u3002\u8BF7\u7EDF\u4E00\u5BBF\u4E3B\u548C\u8FDC\u7A0B\u7684\u63D2\u4EF6\u7248\u672C\u3002`, {
|
|
922
939
|
remote: name
|
|
923
940
|
})
|
|
924
941
|
});
|
|
@@ -950,7 +967,7 @@ function createRuntime() {
|
|
|
950
967
|
} catch (err) {
|
|
951
968
|
emitError({
|
|
952
969
|
remote: name,
|
|
953
|
-
error: new FgError(ErrorCodes.PRELOAD_FAILED, String(err?.message ?? err)
|
|
970
|
+
error: new FgError(ErrorCodes.PRELOAD_FAILED, `\u8FDC\u7A0B\u5E94\u7528 "${name}" \u9884\u52A0\u8F7D\u5931\u8D25\u3002\u5E95\u5C42\u539F\u56E0\uFF1A${String(err?.message ?? err)}\u3002\u8BF7\u68C0\u67E5 manifest \u548C\u8D44\u6E90\u5730\u5740\u3002`, {
|
|
954
971
|
remote: name
|
|
955
972
|
})
|
|
956
973
|
});
|
|
@@ -1199,7 +1216,7 @@ function createHostPages(options, load) {
|
|
|
1199
1216
|
if (route.startsWith(prefix) || `${route}/` === prefix) return name;
|
|
1200
1217
|
}
|
|
1201
1218
|
throw new Error(
|
|
1202
|
-
`[fulgurjs]
|
|
1219
|
+
`[fulgurjs] \u9875\u9762\u8DEF\u7531 "${route}" \u672A\u5339\u914D\u4EFB\u4F55 remotePrefixes\uFF1A{ ${Object.entries(remotePrefixes).map(([k, v]) => `'${k}': '${v}'`).join(", ")} }
|
|
1203
1220
|
\u6839\u56E0: \u9875\u9762\u8868\u6761\u76EE\u7684\u8DEF\u7531\u4E0D\u5728\u4EFB\u4F55\u5DF2\u58F0\u660E\u7684\u8FDC\u7A0B\u524D\u7F00\u4E0B\u3002
|
|
1204
1221
|
\u4FEE\u6CD5: \u5728 remotePrefixes \u8865\u5145\u8BE5\u8DEF\u7531\u524D\u7F00 \u2192 \u8FDC\u7A0B\u540D\u7684\u6620\u5C04\uFF0C\u6216\u4FEE\u6B63\u9875\u9762\u8868 route\u3002`
|
|
1205
1222
|
);
|
|
@@ -1246,8 +1263,8 @@ function createHostPages(options, load) {
|
|
|
1246
1263
|
};
|
|
1247
1264
|
const component = (spec) => {
|
|
1248
1265
|
const sk = (globalThis.__FULGURJS_APP_CONFIG__ ?? {}).sessionKey;
|
|
1249
|
-
const sessionKey = typeof sk === "string" ? sk : void 0;
|
|
1250
|
-
if (sessionKey !== cacheSession) {
|
|
1266
|
+
const sessionKey = typeof sk === "string" && sk !== "" ? sk : void 0;
|
|
1267
|
+
if (sessionKey !== void 0 && sessionKey !== cacheSession) {
|
|
1251
1268
|
compCache.clear();
|
|
1252
1269
|
cacheSession = sessionKey;
|
|
1253
1270
|
}
|
|
@@ -1261,7 +1278,7 @@ function createHostPages(options, load) {
|
|
|
1261
1278
|
const inner = mod?.default ?? mod;
|
|
1262
1279
|
if (!inner) {
|
|
1263
1280
|
throw new Error(
|
|
1264
|
-
`[fulgurjs]
|
|
1281
|
+
`[fulgurjs] \u8FDC\u7A0B\u6A21\u5757 "${spec}" \u6CA1\u6709\u5BFC\u51FA\u53EF\u6E32\u67D3\u7EC4\u4EF6\uFF1B\u5F53\u524D\u503C\u7C7B\u578B\u4E3A ${inner === null ? "null" : typeof inner}\u3002
|
|
1265
1282
|
\u4FEE\u6CD5: \u6838\u5BF9\u8FDC\u7A0B exposes \u952E\u540D\u4E0E\u9875\u9762\u8868 spec \u662F\u5426\u4E00\u81F4\uFF08MFU-006 \u8BED\u4E49\uFF09`
|
|
1266
1283
|
);
|
|
1267
1284
|
}
|
|
@@ -1271,11 +1288,8 @@ function createHostPages(options, load) {
|
|
|
1271
1288
|
errorComponent: errorComponent ?? RemoteErrorPlaceholder,
|
|
1272
1289
|
delay
|
|
1273
1290
|
});
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
inheritAttrs: false,
|
|
1277
|
-
setup: (_props, ctx) => () => (0, import_vue.h)(asyncComp, ctx.attrs, ctx.slots)
|
|
1278
|
-
});
|
|
1291
|
+
asyncComp.name = name;
|
|
1292
|
+
comp = asyncComp;
|
|
1279
1293
|
compCache.set(spec, comp);
|
|
1280
1294
|
}
|
|
1281
1295
|
return comp;
|