@fulgurjs/federation 6.1.1 → 6.1.3
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 +28 -0
- package/dist/bridge-host-react.cjs +8 -0
- package/dist/bridge-host-react.js +1 -1
- package/dist/bridge-host-vue.cjs +8 -0
- package/dist/bridge-host-vue.js +1 -1
- package/dist/bridge-router-vue.js +3 -0
- package/dist/{chunk-77JZ6U6V.js → chunk-UUDAPII6.js} +8 -0
- package/dist/index.cjs +11 -3
- package/dist/index.d.cts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +11 -3
- package/dist/react-adapter.d.cts +3 -1
- package/dist/react-adapter.d.ts +3 -1
- package/dist/react.d.ts +4 -2
- package/dist/runtime-entry.d.ts +4 -2
- package/dist/runtime.js +1 -1
- package/dist/vue.d.ts +4 -2
- package/docs/en/reference/api.md +2 -2
- package/docs/en/reference/errors.md +1 -1
- package/docs/zh/reference/api.md +3 -3
- package/docs/zh/reference/errors.md +1 -1
- package/examples/templates/README.md +1 -1
- package/examples/templates/react-host-vue-remote/pnpm-lock.yaml +7 -7
- package/examples/templates/react-host-vue-remote/pnpm-workspace.yaml +1 -1
- package/examples/templates/react-host-vue-remote/react-host/package.json +1 -1
- package/examples/templates/react-host-vue-remote/vue-remote/package.json +1 -1
- package/examples/templates/react-react/host/package.json +1 -1
- package/examples/templates/react-react/host/tsconfig.json +1 -0
- package/examples/templates/react-react/pnpm-lock.yaml +7 -7
- package/examples/templates/react-react/pnpm-workspace.yaml +1 -1
- package/examples/templates/react-react/remote/package.json +1 -1
- package/examples/templates/react-react/remote/tsconfig.json +1 -0
- package/examples/templates/showcase/pnpm-lock.yaml +11 -11
- package/examples/templates/showcase/pnpm-workspace.yaml +1 -1
- package/examples/templates/showcase/react-host/package.json +1 -1
- package/examples/templates/showcase/react-remote/package.json +1 -1
- package/examples/templates/showcase/react-remote/src/bridge.tsx +5 -5
- package/examples/templates/showcase/vue-host/package.json +1 -1
- package/examples/templates/showcase/vue-remote/package.json +1 -1
- package/examples/templates/vue-host-react-remote/pnpm-lock.yaml +7 -7
- package/examples/templates/vue-host-react-remote/pnpm-workspace.yaml +1 -1
- package/examples/templates/vue-host-react-remote/react-remote/package.json +1 -1
- package/examples/templates/vue-host-react-remote/vue-host/package.json +1 -1
- package/examples/templates/vue-host-react-remote/vue-host/src/App.vue +1 -1
- package/examples/templates/vue-vue/host/package.json +1 -1
- package/examples/templates/vue-vue/host/tsconfig.json +1 -0
- package/examples/templates/vue-vue/pnpm-lock.yaml +7 -7
- package/examples/templates/vue-vue/pnpm-workspace.yaml +1 -1
- package/examples/templates/vue-vue/remote/package.json +1 -1
- package/examples/templates/vue-vue/remote/tsconfig.json +1 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import fs from "fs";
|
|
|
8
8
|
import path from "path";
|
|
9
9
|
|
|
10
10
|
// src/version.ts
|
|
11
|
-
var RUNTIME_VERSION = "6.1.
|
|
11
|
+
var RUNTIME_VERSION = "6.1.3";
|
|
12
12
|
|
|
13
13
|
// src/dev-cors.ts
|
|
14
14
|
function normalizeDevCorsOrigins(input) {
|
|
@@ -1537,6 +1537,11 @@ export { ${nsAs[1]} };`);
|
|
|
1537
1537
|
const specExpr = code.slice(imp.s, imp.e).trim();
|
|
1538
1538
|
const literal = specExpr.match(/^['"](.*)['"]$/s);
|
|
1539
1539
|
if (!literal) continue;
|
|
1540
|
+
{
|
|
1541
|
+
const importStart = code.lastIndexOf("import", d);
|
|
1542
|
+
const before = code.slice(Math.max(0, importStart - 32), importStart);
|
|
1543
|
+
if (/typeof\s*$/u.test(before)) continue;
|
|
1544
|
+
}
|
|
1540
1545
|
const spec = remap(literal[1]);
|
|
1541
1546
|
const matched = matcher ? matchShared(spec, matcher) : null;
|
|
1542
1547
|
const shared = matched && inSharedClosure(clean, ctx.sharedClosureRoots) ? null : matched;
|
|
@@ -1991,6 +1996,9 @@ async function generateDevTypes(options, server) {
|
|
|
1991
1996
|
fs2.mkdirSync(preciseDir, { recursive: true });
|
|
1992
1997
|
const preciseFiles = [];
|
|
1993
1998
|
let accepted = 0;
|
|
1999
|
+
const publicExposeCount = (manifest.exposes ?? []).filter(
|
|
2000
|
+
(expose) => !(manifest.setup && expose.name === manifest.setup)
|
|
2001
|
+
).length;
|
|
1994
2002
|
for (const expose of manifest.exposes ?? []) {
|
|
1995
2003
|
if (manifest.setup && expose.name === manifest.setup) continue;
|
|
1996
2004
|
const skipped = (reason) => console.warn(`[fulgurjs] \u7C7B\u578B\u751F\u6210\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${remote.key}" \u7684\u66B4\u9732\u6A21\u5757 ${JSON.stringify(expose.name)} \u5DF2\u8DF3\u8FC7\u3002\u539F\u56E0\uFF1A${reason}\u3002\u8BF7\u68C0\u67E5\u8BE5\u6A21\u5757\u5728\u8FDC\u7A0B manifest \u4E2D\u7684\u6E90\u6587\u4EF6\u8DEF\u5F84\u3002`);
|
|
@@ -2100,7 +2108,7 @@ async function generateDevTypes(options, server) {
|
|
|
2100
2108
|
);
|
|
2101
2109
|
}
|
|
2102
2110
|
console.log(
|
|
2103
|
-
`[fulgurjs] \u7C7B\u578B\u751F\u6210\uFF1A\u5DF2\u751F\u6210 ${dir}/${remote.key}.d.ts\uFF08\u5DF2\u6536\u5F55 ${accepted}/${
|
|
2111
|
+
`[fulgurjs] \u7C7B\u578B\u751F\u6210\uFF1A\u5DF2\u751F\u6210 ${dir}/${remote.key}.d.ts\uFF08\u5DF2\u6536\u5F55 ${accepted}/${publicExposeCount} \u4E2A\u66B4\u9732\u6A21\u5757\uFF0C\u6A21\u5F0F ${mode}\uFF09\u3002\u8BF7\u786E\u4FDD tsconfig \u7684 include \u5305\u542B "${dir}"\uFF0C\u4EE5\u83B7\u5F97\u7C7B\u578B\u8865\u5168\u3002`
|
|
2104
2112
|
);
|
|
2105
2113
|
}
|
|
2106
2114
|
}
|
|
@@ -2632,7 +2640,7 @@ function repairRolldownAsyncMarks(code, sourceName) {
|
|
|
2632
2640
|
}
|
|
2633
2641
|
|
|
2634
2642
|
// src/runtime-code.gen.ts
|
|
2635
|
-
var runtime_code_gen_default = 'var ve=/^v?(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:-((?:[0-9A-Za-z-]+)(?:\\.[0-9A-Za-z-]+)*))?(?:\\+[0-9A-Za-z.-]+)?$/;function C(l){let f=ve.exec(String(l).trim());return f?{major:Number(f[1]),minor:Number(f[2]??0),patch:Number(f[3]??0),pre:f[4]?f[4].split("."):[]}:null}function $e(l,f){if(l.length===0&&f.length===0)return 0;if(l.length===0)return 1;if(f.length===0)return-1;let d=Math.max(l.length,f.length);for(let c=0;c<d;c++){let g=l[c],y=f[c];if(g===void 0)return-1;if(y===void 0)return 1;let b=/^\\d+$/.test(g),v=/^\\d+$/.test(y);if(b&&v){let A=Number(g)-Number(y);if(A!==0)return A}else{if(b!==v)return b?-1:1;if(g!==y)return g<y?-1:1}}return 0}function T(l,f){let d=C(l),c=C(f);return!d||!c?l<f?-1:l>f?1:0:d.major!==c.major?d.major-c.major:d.minor!==c.minor?d.minor-c.minor:d.patch!==c.patch?d.patch-c.patch:$e(d.pre,c.pre)}var Pe=/^[a-z]+[+:-]/i;function x(l,f){if(f===!1||f==null||f==="")return!0;let d=String(f).trim();return!d||d==="*"||d==="latest"||Pe.test(d)?!0:d.split("||").some(c=>_e(l,c.trim()))}function _e(l,f){if(!f||f==="*")return!C(l)?.pre.length;let d=f.split(/\\s+-\\s+/);if(d.length===2){let y=d[0].trim(),b=d[1].trim();return!(!x(l,`>=${y}`)||!x(l,`<=${b}`))}let c=C(l);if(!c)return!1;let g=ke(f);if(g===null)return!0;for(let y of g)if(!Ie(c,l,y))return!1;return!(c.pre.length>0&&!g.some(y=>y.ver.pre.length>0)&&!g.some(b=>b.ver.major===c.major&&b.ver.minor===c.minor&&b.ver.patch===c.patch))}function ke(l){let f=[],d=l.trim().split(/\\s+/).filter(Boolean);if(d.length===0)return null;for(let c of d){let g=/^(>=|<=|>|<|=|\\^|~)?(.*)$/.exec(c);if(!g)return null;let y=g[1],b=g[2],v=Le(y,b);if(v===null)return null;f.push(...v)}return f}function Le(l,f){let d=Me(f);if(!d)return null;let{ver:c,partial:g}=d;switch(l){case"^":{let y=Oe(c);return y?[{op:">=",ver:c},{op:"<",ver:y}]:null}case"~":{let y=g>=2?{major:c.major,minor:c.minor+1,patch:0,pre:[]}:{major:c.major+1,minor:0,patch:0,pre:[]};return[{op:">=",ver:c},{op:"<",ver:y}]}case">=":return[{op:">=",ver:c}];case">":return g===1?[{op:">=",ver:{major:c.major+1,minor:0,patch:0,pre:[]}}]:g===2?[{op:">=",ver:{major:c.major,minor:c.minor+1,patch:0,pre:[]}}]:[{op:">",ver:c}];case"<":return g===1?[{op:"<",ver:{major:c.major,minor:0,patch:0,pre:[]}}]:g===2?[{op:"<",ver:{major:c.major,minor:c.minor,patch:0,pre:[]}}]:[{op:"<",ver:c}];case"<=":return[{op:"<=",ver:c}];case"=":case void 0:return g===1?[{op:">=",ver:c},{op:"<",ver:{major:c.major+1,minor:0,patch:0,pre:[]}}]:g===2?[{op:">=",ver:c},{op:"<",ver:{major:c.major,minor:c.minor+1,patch:0,pre:[]}}]:[{op:"=",ver:c}];default:return null}}function Oe(l){return l.major>0?{major:l.major+1,minor:0,patch:0,pre:[]}:l.minor>0?{major:0,minor:l.minor+1,patch:0,pre:[]}:{major:0,minor:0,patch:l.patch+1,pre:[]}}function Me(l){let f=l.replace(/^v/,"").trim();if(!f||f==="*"||f==="x"||f==="X")return{ver:{major:0,minor:0,patch:0,pre:[]},partial:0};let d=f.split("."),c=[],g=0;for(let v of d.slice(0,3))if(/^\\d+$/.test(v))c.push(Number(v)),g++;else{if(v==="x"||v==="X"||v==="*")break;break}let y=f.split("-"),b=y.length>1?y.slice(1).join("-").split("+")[0].split("."):[];return g===0&&b.length===0?{ver:{major:0,minor:0,patch:0,pre:[]},partial:0}:{ver:{major:c[0]??0,minor:c[1]??0,patch:c[2]??0,pre:b},partial:g}}function Ae(l,f){switch(f){case">=":return l>=0;case">":return l>0;case"<":return l<0;case"<=":return l<=0;case"=":return l===0}}function Ie(l,f,d){let c=`${l.major}.${l.minor}.${l.patch}`+(l.pre.length?`-${l.pre.join(".")}`:"");if(d.upper)return!(!(T(c,`${d.ver.major}.${d.ver.minor}.${d.ver.patch}`+(d.ver.pre.length?`-${d.ver.pre.join(".")}`:""))>=0)||!(T(c,`${d.upper.major}.${d.upper.minor}.${d.upper.patch}`)<0));let g=T(c,`${d.ver.major}.${d.ver.minor}.${d.ver.patch}`+(d.ver.pre.length?`-${d.ver.pre.join(".")}`:"")),y=Ae(g,d.op);return d.ver.pre.length>0&&l.pre.length===0&&(d.op===">"||d.op==="<")?!1:y}var w=class extends Error{code;details;constructor(f,d,c,g){super(`[fulgurjs:${f}] ${d}`,g),this.name="FgError",this.code=f,this.details=c}},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 te="6.1.1";var Te="__fulgurjsSetup",xe="__FULGURJS_APP_CONFIG__",H=15e3,oe=2,je=5,Ce=3e4,Ne=4e3,Ue=.2;function Ve(){let l=Object.create(null),f=new Map,d=[],c=new Set,g=new Map,y=(e,r)=>JSON.stringify([r.shareScope||"default",r.shareKey||e,r.requiredVersion??null,!!r.singleton,!!r.strictVersion]),b=new Map,v=new Map,A=new WeakMap,N=new WeakMap,_={},ie=()=>{for(let e of d)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)}},U=new Map,V,G=e=>{let r=U.get(e);return r||U.set(e,r={}),r},B=()=>globalThis[xe]??{};async function J(e,r,n,o){let t=u=>u instanceof w?u:new w(E.SETUP_RUN_FAILED,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e}" \\u7684 ${o} \\u521D\\u59CB\\u5316\\u5931\\u8D25\\u3002\n\\u539F\\u56E0\\uFF1A${String(u?.message??u)}\n\\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});V=e;let s;try{s=r(n)}catch(u){throw t(u)}finally{V=void 0}try{await s}catch(u){throw t(u)}}async function ae(e,r,n,o){e.debug.setup="pending";try{if(e.manifestUrl)try{await q(`${e.name}/${n}`)}catch{}let t=await r.get(n),s=t?.default;if(typeof s!="function")throw new w(E.SETUP_INVALID_EXPORT,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 setup \\u6A21\\u5757 "${n}" \\u65E0\\u6CD5\\u521D\\u59CB\\u5316\\u3002\n\\u539F\\u56E0\\uFF1A\\u9ED8\\u8BA4\\u5BFC\\u51FA\\u7C7B\\u578B\\u4E3A ${t==null?String(t):typeof s}\\uFF0C\\u5E94\\u4E3A\\u51FD\\u6570\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5728 setup \\u6307\\u5411\\u7684\\u6587\\u4EF6\\u4E2D\\u9ED8\\u8BA4\\u5BFC\\u51FA\\u51FD\\u6570\\uFF0C\\u4F8B\\u5982 export default async function setup(context) { ... }\\uFF1B\\u5177\\u540D onSession \\u53EF\\u9009\\u3002`,{remote:e.name,module:n});if(t.onSession!==void 0&&typeof t.onSession!="function")throw new w(E.SETUP_INVALID_EXPORT,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 setup \\u6A21\\u5757 "${n}" \\u65E0\\u6CD5\\u521D\\u59CB\\u5316\\u3002\n\\u539F\\u56E0\\uFF1AonSession \\u5BFC\\u51FA\\u7C7B\\u578B\\u4E3A ${typeof t.onSession}\\uFF0C\\u5E94\\u4E3A\\u51FD\\u6570\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5C06 onSession \\u6539\\u4E3A\\u5177\\u540D\\u5BFC\\u51FA\\u7684\\u51FD\\u6570\\uFF0C\\u6216\\u5220\\u9664\\u8BE5\\u5BFC\\u51FA\\u3002`,{remote:e.name,module:n});if(o.setupExports=t,t.globalComponents!==void 0){if(typeof t.globalComponents!="object"||t.globalComponents===null||Array.isArray(t.globalComponents))throw new w(E.SETUP_INVALID_EXPORT,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 setup \\u6A21\\u5757 "${n}" \\u65E0\\u6CD5\\u521D\\u59CB\\u5316\\u3002\n\\u539F\\u56E0\\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\n\\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}await J(e.name,s,{appContext:B(),signal:(o.controller??=new AbortController).signal},"setup"),e.debug.setup="ready"}catch(t){throw e.debug.setup="failed",o.setupExports=void 0,o.globalComponents=void 0,t}}async function ce(e,r,n){let o=B(),t=o?.sessionKey;if(typeof t!="string"||t==="")throw new w(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\n\\u539F\\u56E0\\uFF1A\\u5F53\\u524D\\u503C\\u4E3A ${t===void 0?"\\u7F3A\\u5931":JSON.stringify(t)}\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5BBF\\u4E3B\\u6BCF\\u6B21\\u767B\\u5F55\\u6216\\u91CD\\u767B\\u65F6\\u751F\\u6210\\u65B0\\u7684\\u975E\\u654F\\u611F\\u767B\\u5F55\\u4EE3\\u6B21 ID\\uFF0C\\u5E76\\u5728\\u52A0\\u8F7D\\u8FDC\\u7A0B\\u9875\\u9762\\u524D\\u8C03\\u7528 provideAppContext({ ..., sessionKey: \'\\u767B\\u5F55\\u4EE3\\u6B21 ID\' })\\uFF1B\\u4E0D\\u8981\\u4F7F\\u7528 token \\u539F\\u6587\\u3002`,{remote:e.name});if(r.sessionPromise&&r.sessionKey===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(),i=(async()=>{await u,!s.signal.aborted&&await J(e.name,n,{appContext:o,sessionKey:t,signal:s.signal},"onSession")})();return r.sessionPromise=i,i.catch(()=>{r.sessionKey===t&&(r.sessionKey=void 0,r.sessionPromise=void 0)}),i}async function le(e,r){let n=r?.[Te];if(typeof n!="string"||n==="")return;let o=G(e.name);o.setupPromise||(o.setupPromise=ae(e,r,n,o).catch(s=>{throw o.setupPromise=void 0,s})),await o.setupPromise;let t=o.setupExports?.onSession;typeof t=="function"&&await ce(e,o,t)}function ue(){for(let e of U.values()){try{e.controller?.abort()}catch{}e.sessionKey=void 0,e.sessionPromise=void 0}}let M=e=>l[e]??=Object.create(null);function $(e){try{_.onRemoteError?.(e)}catch{}typeof window<"u"&&window.dispatchEvent(new CustomEvent("fulgurjs:error",{detail:e}))}function fe(e="default"){return M(e),l}function F(e,r,n,o,t={}){let s=M(e||"default"),u=Object.hasOwn(s,r)?s[r]:void 0,i=u&&typeof u=="object"?u:void 0;i||(i=Object.create(null),s[r]=i),!(Object.hasOwn(i,n)&&i[n])&&(i[n]={version:n,get:o,from:t.from??"unknown",eager:!!t.eager,loaded:!!t.loaded})}function de(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 X(e){for(let r of e){de(r);let n=f.get(r.name);f.set(r.name,{timeout:H,retries:oe,...n,...r,breakerThreshold:r.breaker?.threshold??n?.breakerThreshold??je,breakerResetMs:r.breaker?.resetMs??n?.breakerResetMs??Ce,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){X([e])}function pe(e){d.push(...e),g.clear(),ie()}function I(e,r,n=!1){let o=r.shareScope||"default",t=r.shareKey||e,u=M(o)[t]||{},i=Object.keys(u).filter(p=>!n||r.singleton||u[p].value!==void 0);if(n&&i.length===0)return;let S=r.requiredVersion,m=i.filter(p=>S===void 0||S===!1||x(p,S)),a;if(r.singleton&&i.length>0){let p=i.filter(h=>u[h].loaded);if(a=[...p.length?p:i].sort(T).pop(),!m.includes(a)){let h=u[a],L=`\\u73B0\\u8C61\\uFF1A\\u5171\\u4EAB\\u5355\\u4F8B "${t}" \\u7684\\u5B9E\\u9645\\u7248\\u672C\\u4E0D\\u6EE1\\u8DB3\\u5F53\\u524D\\u5E94\\u7528\\u8981\\u6C42\\u3002\n\\u539F\\u56E0\\uFF1A\\u5E94\\u7528\\u8981\\u6C42 ${S??"\\u4EFB\\u610F\\u7248\\u672C"}\\uFF0C\\u4F5C\\u7528\\u57DF\\u4E2D\\u6709 ${i.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 ${a}\\u3002\n\\u5F71\\u54CD\\uFF1A\\u53EF\\u80FD\\u51FA\\u73B0\\u72B6\\u6001\\u4E0D\\u4E00\\u81F4\\u6216\\u8FD0\\u884C\\u9519\\u8BEF\\uFF0C\\u5177\\u4F53\\u53D6\\u51B3\\u4E8E\\u4E24\\u7AEF API \\u662F\\u5426\\u517C\\u5BB9\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u7EDF\\u4E00\\u5BBF\\u4E3B\\u4E0E\\u8FDC\\u7A0B\\u7684\\u4F9D\\u8D56\\u7248\\u672C\\uFF0C\\u6216\\u6838\\u5BF9\\u540E\\u8C03\\u6574 shared.requiredVersion\\uFF1B\\u82E5\\u5FC5\\u987B\\u62D2\\u7EDD\\u4E0D\\u517C\\u5BB9\\u7248\\u672C\\uFF0C\\u8BF7\\u542F\\u7528 strictVersion\\u3002`;if(r.strictVersion){let O=new w(E.SHARE_STRICT_VERSION,L,{shareKey:t,requiredVersion:S});throw $({remote:h.from,error:O}),O}let P=`${o}|${t}|${S??"*"}|${a}|${i.join(",")}`;c.has(P)||(c.add(P),console.warn(`[fulgurjs:MFU-010] ${L}`))}}else if(a=[...m].sort(T).pop(),!a){if(r.strictVersion){let p=new w(E.SHARE_STRICT_VERSION,`\\u73B0\\u8C61\\uFF1A\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${o}" \\u4E2D\\u627E\\u4E0D\\u5230\\u7B26\\u5408\\u8981\\u6C42\\u7684 "${t}"\\u3002\n\\u539F\\u56E0\\uFF1A\\u8981\\u6C42\\u7248\\u672C ${S}\\uFF0C\\u5F53\\u524D\\u53EF\\u7528\\u7248\\u672C\\u4E3A ${i.join("\\u3001")||"\\u65E0"}\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u7EDF\\u4E00\\u5BBF\\u4E3B\\u4E0E\\u8FDC\\u7A0B\\u7684\\u4F9D\\u8D56\\u7248\\u672C\\uFF0C\\u6216\\u4FEE\\u6B63 shared.requiredVersion\\u3002`);throw $({remote:t,error:p}),p}return}return u[a]}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=M(t),i=Object.hasOwn(u,s)?u[s]:void 0;if(i&&Object.keys(i).length>0){try{let m=I(e,r);if(m&&m.value===void 0){if(m.version===o)m.value=n,m.loaded=!0;else if(r.singleton&&!m.pendingGet){F(t,s,o,()=>Promise.resolve(n),{from:"fulgurjs:local-fallback",loaded:!0});let a=u[s][o];a.value=n,a.loaded=!0}}}catch{}return}F(t,s,o,()=>Promise.resolve(n),{from:"fulgurjs:local-fallback",loaded:!0});let S=u[s]?.[o];S&&(S.value=n)}async function z(e,r={}){let n=r.shareScope||"default",o=r.shareKey||e,t=M(n)[o]||{},s=y(e,r),u=_.resolveShare?g.get(s):void 0,i=u||I(e,r);if(!i){if(r.fallback){let p=await r.fallback();return W(e,r,p),p}let a=new w(E.SHARE_NOT_AVAILABLE,`\\u73B0\\u8C61\\uFF1A\\u65E0\\u6CD5\\u52A0\\u8F7D\\u5171\\u4EAB\\u4F9D\\u8D56 "${o}"\\u3002\n\\u539F\\u56E0\\uFF1A\\u4F5C\\u7528\\u57DF "${n}" \\u4E2D\\u6CA1\\u6709\\u7B26\\u5408 ${r.requiredVersion??"\\u4EFB\\u610F\\u7248\\u672C"} \\u8981\\u6C42\\u7684\\u7248\\u672C\\uFF0C\\u4E14\\u672A\\u914D\\u7F6E\\u672C\\u5730\\u526F\\u672C\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5728\\u5BBF\\u4E3B\\u6216\\u8FDC\\u7A0B\\u6CE8\\u518C\\u8BE5\\u4F9D\\u8D56\\uFF0C\\u6216\\u4E3A shared \\u914D\\u7F6E\\u53EF\\u7528\\u7684\\u672C\\u5730\\u526F\\u672C\\u3002`,{shareKey:o,requiredVersion:r.requiredVersion});throw $({remote:o,error:a}),a}if(_.resolveShare&&!u){let a=await _.resolveShare({shareKey:o,shareScope:n,requiredVersion:r.requiredVersion,picked:i,available:Object.values(t)});a&&(i=a),g.set(s,i)}if(i.value!==void 0)return g.set(y(e,r),i),i.value;if(i.loaded=!0,!i.pendingGet)try{i.pendingGet=i.get()}catch(a){i.pendingGet=Promise.reject(a)}let S=i.pendingGet,m;try{m=await S}catch(a){if(i.value!==void 0)return g.set(y(e,r),i),i.value;throw i.loaded=!1,g.get(s)===i&&g.delete(s),a}finally{i.pendingGet===S&&(i.pendingGet=void 0)}return i.value===void 0&&(i.value=m),g.set(y(e,r),i),i.value}function ge(e,r={}){return _.resolveShare?g.get(y(e,r))?.value:I(e,r,!0)?.value}function he(e,r,n,o){W(e,{...r,localVersion:n},o)}function ye(e,r){let n=r.shareScope||"default",o=r.shareKey||e;if(_.resolveShare){let s=y(e,r),u=g.get(s);if(u&&u.value!==void 0)return{kind:"ready",value:u.value};let i=u||_.resolveShare({shareKey:o,shareScope:n,requiredVersion:r.requiredVersion,picked:I(e,r),available:Object.values(M(n)[o]||{})});if(i&&typeof i.then=="function")throw Promise.resolve(i).catch(()=>{}),new w(E.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\n\\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\n\\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 S=i;if(S){if(S.value!==void 0)return g.set(y(e,r),S),{kind:"ready",value:S.value};if(S.version!==void 0&&S.version===r.localVersion)return{kind:"local"};throw new w(E.SHARE_NOT_AVAILABLE,`\\u73B0\\u8C61\\uFF1AresolveShare \\u4E3A "${o}" \\u9009\\u62E9\\u4E86\\u672A\\u5C31\\u7EEA\\u7684 ${S.version??"\\u6761\\u76EE"}\\u3002\n\\u539F\\u56E0\\uFF1A\\u540C\\u6B65\\u6D88\\u8D39\\u4E0D\\u80FD\\u7B49\\u5F85\\u52A0\\u8F7D\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5148\\u52A8\\u6001 loadShare \\u518D\\u5BFC\\u5165\\u6D88\\u8D39\\u8005\\uFF0C\\u6216\\u9009\\u62E9\\u5DF2\\u5C31\\u7EEA\\u5B9E\\u4F8B/\\u672C\\u5730\\u7248\\u672C ${r.localVersion??"\\u672A\\u58F0\\u660E"}\\u3002`,{shareKey:o,requiredVersion:r.requiredVersion,syncUnsupported:!0})}}let t=I(e,r);if(!t)return{kind:"local"};if(t.value!==void 0)return{kind:"ready",value:t.value};if(t.version!==void 0&&t.version===r.localVersion)return{kind:"local"};if(r.singleton||r.strictVersion&&r.requiredVersion&&(!r.localVersion||!x(r.localVersion,r.requiredVersion))){if(r.strictVersion||t.pendingGet)throw new w(E.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\n\\u539F\\u56E0\\uFF1A\\u4E0D\\u80FD\\u6539\\u7528\\u4E0D\\u517C\\u5BB9\\u7684\\u672C\\u5730\\u526F\\u672C\\u6216\\u5206\\u88C2\\u5355\\u4F8B\\u3002\n\\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 c.has(s)||(c.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 Se(e){if(_.resolveShare){for(let{name:r,opts:n}of e){let o=y(r,n);if(g.has(o))continue;let t=I(r,n),s=await _.resolveShare({shareKey:n.shareKey||r,shareScope:n.shareScope||"default",requiredVersion:n.requiredVersion,picked:t,available:Object.values(M(n.shareScope||"default")[n.shareKey||r]||{})})||t;s&&g.set(o,s)}for(let{name:r,opts:n}of e)await z(r,n)}}function Y(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 we=e=>new Promise(r=>setTimeout(r,e)),Q=new Set;function D(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:E.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??H,`\\u52A0\\u8F7D\\u8FDC\\u7A0B\\u5165\\u53E3 ${Y(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 w(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 "${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 w(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(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});throw $({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 p=await Z(e.promise(),e.timeout??H,`\\u89E3\\u6790\\u52A8\\u6001\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}"`),h=typeof p=="string"?await ee(p,e):p;return D(h,e),h});else for(let p of[e.entry,...e.fallback??[]])s.push(async()=>{let h=await ee(p,e);return D(h,e),h});let u,i,S=!1,m=r?.retries??e.retries??oe;for(let p of s){for(let h=0;h<=m;h++){let L=performance.now();try{u=await p(),e.lastLoadMs=Math.round(performance.now()-L),e.debug.lastLoadMs=e.lastLoadMs,S=!0;break}catch(P){if(i=P,P?.code)throw P;h<m&&await we(Math.min(Ne,200*2**h)*(1-Ue*(1-2*Math.random())))}}if(S)break}if(!S||!u){let p=Y(e.entry),h=[];throw/^https?:\\/\\//.test(e.entry)&&typeof location<"u"?(h.push(`1. \\u5728\\u6D4F\\u89C8\\u5668\\u6253\\u5F00 ${p}\\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 ${p}\\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 w(E.REMOTE_LOAD_FAILED,`\\u73B0\\u8C61\\uFF1A\\u65E0\\u6CD5\\u4ECE ${p} \\u52A0\\u8F7D\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}"\\u3002\n\\u539F\\u56E0\\uFF1A${String(i?.message??i)}\n\\u4FEE\\u6CD5\\uFF1A\n${h.join(`\n`)}`,{remote:e.name})}D(u,e);let a=N.get(u);if(a&&a!==n)throw new w(E.CONTAINER_REINIT_CONFLICT,`\\u8FDC\\u7A0B\\u5BB9\\u5668 "${e.name}" \\u5DF2\\u4F7F\\u7528\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${a}" \\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(l),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 w)throw $({remote:e.name,error:s}),s;if(s?.code)throw $({remote:e.name,error:s}),s;let u=new w(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 K(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 Ee(e,r){let{remote:n,module:o}=K(e);if(o&&V===n)throw new w(E.SETUP_RECURSION,`\\u73B0\\u8C61\\uFF1A\\u52A0\\u8F7D "${e}" \\u65F6\\uFF0C\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\u7684 setup/onSession \\u53C8\\u540C\\u6B65\\u52A0\\u8F7D\\u4E86\\u81EA\\u8EAB\\u6A21\\u5757\\uFF0C\\u5F62\\u6210\\u5FAA\\u73AF\\u7B49\\u5F85\\u3002\n\\u539F\\u56E0\\uFF1A\\u521D\\u59CB\\u5316\\u5C1A\\u672A\\u5B8C\\u6210\\uFF0C\\u4E0D\\u80FD\\u7B49\\u5F85\\u81EA\\u8EAB\\u7684\\u521D\\u59CB\\u5316\\u7ED3\\u679C\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u4E0D\\u8981\\u5728 setup/onSession \\u4E2D\\u52A0\\u8F7D\\u540C\\u4E00\\u8FDC\\u7A0B\\u7684\\u6A21\\u5757\\uFF1B\\u8BF7\\u5728\\u9875\\u9762\\u7EC4\\u4EF6\\u4E2D\\u52A0\\u8F7D\\uFF0C\\u6216\\u901A\\u8FC7 context \\u89E3\\u8026\\u3002`,{remote:n});try{_.beforeLoadRemote?.({remote:n,module:o})}catch(a){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",a)}let t=f.get(n);if(!t)throw new w(E.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 a=o&&t.manifestUrl?q(e):Promise.resolve();[s]=await Promise.all([re(t,{retries:r?.retries}),a])}catch(a){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`,a),$({remote:n,error:a}),await r.fallbackModule();throw a}if(!o)return s;await le(t,s);let u=G(n).globalComponents,i=r?.consumerApp;if(u&&i&&typeof i.component=="function")for(let a of Object.keys(u))i.component(a,u[a]);let S=`${n}@${t.shareScope||"default"}#${o}`;b.has(S)||b.set(S,s.get(o).catch(a=>{throw b.delete(S),a instanceof w||a?.code?a:new w(E.REMOTE_LOAD_FAILED,`\\u65E0\\u6CD5\\u4ECE\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\u52A0\\u8F7D\\u6A21\\u5757 "${o}"\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(a?.message??a)}\\u3002\\u8BF7\\u6838\\u5BF9 exposes \\u952E\\u548C\\u8FDC\\u7A0B\\u6784\\u5EFA\\u4EA7\\u7269\\u3002`,{remote:n,module:o})}));let m;try{m=await b.get(S)}catch(a){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`,a),$({remote:n,error:a}),await r.fallbackModule();throw a}try{_.afterLoadRemote?.({remote:n,module:o,module_ns:m})}catch(a){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",a)}if(m&&typeof m=="object"&&Object.keys(m).length===0){let a=new w(E.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});$({remote:n,error:a}),console.error(a.message)}return m}function Re(e){let r=f.get(e);if(!r)throw new w(E.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 q(e,r={}){let{remote:n,module:o}=K(e),t=f.get(n);if(!t)throw new w(E.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=(m,a)=>{if(m.sheet)return Promise.resolve();let p=A.get(m);if(p)return p;let h=new Promise(L=>{let P=()=>{m.removeEventListener("load",P),m.removeEventListener("error",O),L()},O=()=>{$({remote:n,error:new w(E.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\u7684\\u6837\\u5F0F\\u8D44\\u6E90\\u52A0\\u8F7D\\u5931\\u8D25\\uFF1A${a}\\u3002\\u8BF7\\u68C0\\u67E5\\u6587\\u4EF6\\u662F\\u5426\\u5B58\\u5728\\u4EE5\\u53CA\\u8DE8\\u57DF\\u548C\\u7F13\\u5B58\\u914D\\u7F6E\\u3002`,{remote:n})}),P()};m.addEventListener("load",P,{once:!0}),m.addEventListener("error",O,{once:!0}),m.sheet&&P()});return A.set(m,h),h},i=(m,a)=>{if(typeof document>"u")return Promise.resolve();let p=document.querySelector(`link[href="${m}"]`);if(p)return a==="style"&&s==="preload"?A.get(p)??Promise.resolve():Promise.resolve();let h=document.createElement("link");h.rel=a==="style"?"stylesheet":"modulepreload",h.href=m,s==="prefetch"&&(h.fetchPriority="low");let L=a==="style"?u(h,m):Promise.resolve();return document.head.appendChild(h),a==="style"&&s==="preload"?L:Promise.resolve()},S=m=>{let a=typeof document<"u"?document.baseURI:void 0,p=new URL(t.entry,a||"http://fulgurjs.invalid/");return!p.pathname.endsWith("/")&&!p.pathname.split("/").pop().includes(".")&&(p.pathname+="/"),new URL(m,p).href};try{if(t.manifestUrl){let m=v.get(t.manifestUrl);m||(m=fetch(t.manifestUrl,{cache:"no-cache",signal:AbortSignal.timeout(8e3)}).then(p=>p.ok?p.json():void 0),v.set(t.manifestUrl,m),m.then(p=>{p||v.delete(t.manifestUrl)},()=>v.delete(t.manifestUrl)));let a=await m;if(a){let p=a.schemaVersion;if(typeof p=="number"&&(!Number.isInteger(p)||p>1)){$({remote:n,error:new w(E.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\u7684 manifest \\u534F\\u8BAE\\u7248\\u672C\\u4E3A ${String(p)}\\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 i(t.entry,"modulepreload");return}await i(t.entry,"modulepreload");let h=a.exposes,L=Array.isArray(h)?h.filter(k=>k&&typeof k=="object").map(k=>[String(k.name??""),k]):h&&typeof h=="object"?Object.entries(h):[],P=o?L.filter(([k,j])=>ne(String(j?.name??k))===o):L,O=[];for(let[,k]of P)if(typeof k?.file=="string"&&await i(S(k.file),"modulepreload"),Array.isArray(k?.css))for(let j of k.css){if(typeof j!="string")continue;let be=i(S(j),"style");s==="preload"&&O.push(be)}await Promise.all(O);return}}await i(t.entry,"modulepreload")}catch(m){$({remote:n,error:new w(E.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\u9884\\u52A0\\u8F7D\\u5931\\u8D25\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(m?.message??m)}\\u3002\\u8BF7\\u68C0\\u67E5 manifest \\u548C\\u8D44\\u6E90\\u5730\\u5740\\u3002`,{remote:n})})}}return typeof window>"u"||(window.__FULGURJS_SCOPE__=l,window.__FULGURJS_INFO__={get remotes(){let e={};for(let[r,n]of f)e[r]={...n.debug,entry:n.entry};return e},errors:[]}),{shareScopeMap:l,initSharing:fe,registerShare:F,registerRemotes:X,registerRemote:me,registerPlugins:pe,loadShare:z,loadShareSync:ye,prepareShares:Se,getLoadedShare:ge,pinLoadedShare:he,loadRemote:Ee,getContainer:Re,preloadRemote:q,parseSpec:K,clearSessionState:ue}}var se=globalThis,R=se.__FULGURJS_RUNTIME__??Ve();se.__FULGURJS_RUNTIME__=R;try{Object.freeze(R)}catch{}var Je=te;function Xe(){return R}var We=R.initSharing,ze=R.registerShare,Ye=R.registerRemotes,Ze=R.registerRemote,Qe=R.registerPlugins,er=R.loadShare,rr=R.getLoadedShare,nr=R.prepareShares||(async l=>{for(let{name:f,opts:d}of l)await R.loadShare(f,d)}),tr=R.loadShareSync,or=R.pinLoadedShare,sr=R.loadRemote,ir=R.getContainer,ar=R.preloadRemote,cr=R.parseSpec,lr=R.clearSessionState,ur=R.shareScopeMap;function fr(l){if(l&&typeof l=="object"&&"default"in l){let f=l.default;return f!==void 0?f:l}return l}var dr=R;export{lr as clearSessionState,dr as default,ir as getContainer,rr as getLoadedShare,Xe as getRuntime,We as initSharing,sr as loadRemote,er as loadShare,tr as loadShareSync,cr as parseSpec,or as pinLoadedShare,ar as preloadRemote,nr as prepareShares,Qe as registerPlugins,Ze as registerRemote,Ye as registerRemotes,ze as registerShare,R as runtime,ur as shareScopeMap,fr as unwrapDefault,Je as version};\n';
|
|
2643
|
+
var runtime_code_gen_default = 'var ve=/^v?(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:-((?:[0-9A-Za-z-]+)(?:\\.[0-9A-Za-z-]+)*))?(?:\\+[0-9A-Za-z.-]+)?$/;function C(l){let f=ve.exec(String(l).trim());return f?{major:Number(f[1]),minor:Number(f[2]??0),patch:Number(f[3]??0),pre:f[4]?f[4].split("."):[]}:null}function $e(l,f){if(l.length===0&&f.length===0)return 0;if(l.length===0)return 1;if(f.length===0)return-1;let d=Math.max(l.length,f.length);for(let c=0;c<d;c++){let g=l[c],y=f[c];if(g===void 0)return-1;if(y===void 0)return 1;let b=/^\\d+$/.test(g),v=/^\\d+$/.test(y);if(b&&v){let A=Number(g)-Number(y);if(A!==0)return A}else{if(b!==v)return b?-1:1;if(g!==y)return g<y?-1:1}}return 0}function T(l,f){let d=C(l),c=C(f);return!d||!c?l<f?-1:l>f?1:0:d.major!==c.major?d.major-c.major:d.minor!==c.minor?d.minor-c.minor:d.patch!==c.patch?d.patch-c.patch:$e(d.pre,c.pre)}var Pe=/^[a-z]+[+:-]/i;function x(l,f){if(f===!1||f==null||f==="")return!0;let d=String(f).trim();return!d||d==="*"||d==="latest"||Pe.test(d)?!0:d.split("||").some(c=>_e(l,c.trim()))}function _e(l,f){if(!f||f==="*")return!C(l)?.pre.length;let d=f.split(/\\s+-\\s+/);if(d.length===2){let y=d[0].trim(),b=d[1].trim();return!(!x(l,`>=${y}`)||!x(l,`<=${b}`))}let c=C(l);if(!c)return!1;let g=ke(f);if(g===null)return!0;for(let y of g)if(!Ie(c,l,y))return!1;return!(c.pre.length>0&&!g.some(y=>y.ver.pre.length>0)&&!g.some(b=>b.ver.major===c.major&&b.ver.minor===c.minor&&b.ver.patch===c.patch))}function ke(l){let f=[],d=l.trim().split(/\\s+/).filter(Boolean);if(d.length===0)return null;for(let c of d){let g=/^(>=|<=|>|<|=|\\^|~)?(.*)$/.exec(c);if(!g)return null;let y=g[1],b=g[2],v=Le(y,b);if(v===null)return null;f.push(...v)}return f}function Le(l,f){let d=Me(f);if(!d)return null;let{ver:c,partial:g}=d;switch(l){case"^":{let y=Oe(c);return y?[{op:">=",ver:c},{op:"<",ver:y}]:null}case"~":{let y=g>=2?{major:c.major,minor:c.minor+1,patch:0,pre:[]}:{major:c.major+1,minor:0,patch:0,pre:[]};return[{op:">=",ver:c},{op:"<",ver:y}]}case">=":return[{op:">=",ver:c}];case">":return g===1?[{op:">=",ver:{major:c.major+1,minor:0,patch:0,pre:[]}}]:g===2?[{op:">=",ver:{major:c.major,minor:c.minor+1,patch:0,pre:[]}}]:[{op:">",ver:c}];case"<":return g===1?[{op:"<",ver:{major:c.major,minor:0,patch:0,pre:[]}}]:g===2?[{op:"<",ver:{major:c.major,minor:c.minor,patch:0,pre:[]}}]:[{op:"<",ver:c}];case"<=":return[{op:"<=",ver:c}];case"=":case void 0:return g===1?[{op:">=",ver:c},{op:"<",ver:{major:c.major+1,minor:0,patch:0,pre:[]}}]:g===2?[{op:">=",ver:c},{op:"<",ver:{major:c.major,minor:c.minor+1,patch:0,pre:[]}}]:[{op:"=",ver:c}];default:return null}}function Oe(l){return l.major>0?{major:l.major+1,minor:0,patch:0,pre:[]}:l.minor>0?{major:0,minor:l.minor+1,patch:0,pre:[]}:{major:0,minor:0,patch:l.patch+1,pre:[]}}function Me(l){let f=l.replace(/^v/,"").trim();if(!f||f==="*"||f==="x"||f==="X")return{ver:{major:0,minor:0,patch:0,pre:[]},partial:0};let d=f.split("."),c=[],g=0;for(let v of d.slice(0,3))if(/^\\d+$/.test(v))c.push(Number(v)),g++;else{if(v==="x"||v==="X"||v==="*")break;break}let y=f.split("-"),b=y.length>1?y.slice(1).join("-").split("+")[0].split("."):[];return g===0&&b.length===0?{ver:{major:0,minor:0,patch:0,pre:[]},partial:0}:{ver:{major:c[0]??0,minor:c[1]??0,patch:c[2]??0,pre:b},partial:g}}function Ae(l,f){switch(f){case">=":return l>=0;case">":return l>0;case"<":return l<0;case"<=":return l<=0;case"=":return l===0}}function Ie(l,f,d){let c=`${l.major}.${l.minor}.${l.patch}`+(l.pre.length?`-${l.pre.join(".")}`:"");if(d.upper)return!(!(T(c,`${d.ver.major}.${d.ver.minor}.${d.ver.patch}`+(d.ver.pre.length?`-${d.ver.pre.join(".")}`:""))>=0)||!(T(c,`${d.upper.major}.${d.upper.minor}.${d.upper.patch}`)<0));let g=T(c,`${d.ver.major}.${d.ver.minor}.${d.ver.patch}`+(d.ver.pre.length?`-${d.ver.pre.join(".")}`:"")),y=Ae(g,d.op);return d.ver.pre.length>0&&l.pre.length===0&&(d.op===">"||d.op==="<")?!1:y}var w=class extends Error{code;details;constructor(f,d,c,g){super(`[fulgurjs:${f}] ${d}`,g),this.name="FgError",this.code=f,this.details=c}},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 te="6.1.3";var Te="__fulgurjsSetup",xe="__FULGURJS_APP_CONFIG__",H=15e3,oe=2,je=5,Ce=3e4,Ne=4e3,Ue=.2;function Ve(){let l=Object.create(null),f=new Map,d=[],c=new Set,g=new Map,y=(e,r)=>JSON.stringify([r.shareScope||"default",r.shareKey||e,r.requiredVersion??null,!!r.singleton,!!r.strictVersion]),b=new Map,v=new Map,A=new WeakMap,N=new WeakMap,_={},ie=()=>{for(let e of d)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)}},U=new Map,V,G=e=>{let r=U.get(e);return r||U.set(e,r={}),r},B=()=>globalThis[xe]??{};async function J(e,r,n,o){let t=u=>u instanceof w?u:new w(E.SETUP_RUN_FAILED,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e}" \\u7684 ${o} \\u521D\\u59CB\\u5316\\u5931\\u8D25\\u3002\n\\u539F\\u56E0\\uFF1A${String(u?.message??u)}\n\\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});V=e;let s;try{s=r(n)}catch(u){throw t(u)}finally{V=void 0}try{await s}catch(u){throw t(u)}}async function ae(e,r,n,o){e.debug.setup="pending";try{if(e.manifestUrl)try{await q(`${e.name}/${n}`)}catch{}let t=await r.get(n),s=t?.default;if(typeof s!="function")throw new w(E.SETUP_INVALID_EXPORT,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 setup \\u6A21\\u5757 "${n}" \\u65E0\\u6CD5\\u521D\\u59CB\\u5316\\u3002\n\\u539F\\u56E0\\uFF1A\\u9ED8\\u8BA4\\u5BFC\\u51FA\\u7C7B\\u578B\\u4E3A ${t==null?String(t):typeof s}\\uFF0C\\u5E94\\u4E3A\\u51FD\\u6570\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5728 setup \\u6307\\u5411\\u7684\\u6587\\u4EF6\\u4E2D\\u9ED8\\u8BA4\\u5BFC\\u51FA\\u51FD\\u6570\\uFF0C\\u4F8B\\u5982 export default async function setup(context) { ... }\\uFF1B\\u5177\\u540D onSession \\u53EF\\u9009\\u3002`,{remote:e.name,module:n});if(t.onSession!==void 0&&typeof t.onSession!="function")throw new w(E.SETUP_INVALID_EXPORT,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 setup \\u6A21\\u5757 "${n}" \\u65E0\\u6CD5\\u521D\\u59CB\\u5316\\u3002\n\\u539F\\u56E0\\uFF1AonSession \\u5BFC\\u51FA\\u7C7B\\u578B\\u4E3A ${typeof t.onSession}\\uFF0C\\u5E94\\u4E3A\\u51FD\\u6570\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5C06 onSession \\u6539\\u4E3A\\u5177\\u540D\\u5BFC\\u51FA\\u7684\\u51FD\\u6570\\uFF0C\\u6216\\u5220\\u9664\\u8BE5\\u5BFC\\u51FA\\u3002`,{remote:e.name,module:n});if(o.setupExports=t,t.globalComponents!==void 0){if(typeof t.globalComponents!="object"||t.globalComponents===null||Array.isArray(t.globalComponents))throw new w(E.SETUP_INVALID_EXPORT,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 setup \\u6A21\\u5757 "${n}" \\u65E0\\u6CD5\\u521D\\u59CB\\u5316\\u3002\n\\u539F\\u56E0\\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\n\\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}await J(e.name,s,{appContext:B(),signal:(o.controller??=new AbortController).signal},"setup"),e.debug.setup="ready"}catch(t){throw e.debug.setup="failed",o.setupExports=void 0,o.globalComponents=void 0,t}}async function ce(e,r,n){let o=B(),t=o?.sessionKey;if(typeof t!="string"||t==="")throw new w(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\n\\u539F\\u56E0\\uFF1A\\u5F53\\u524D\\u503C\\u4E3A ${t===void 0?"\\u7F3A\\u5931":JSON.stringify(t)}\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5BBF\\u4E3B\\u6BCF\\u6B21\\u767B\\u5F55\\u6216\\u91CD\\u767B\\u65F6\\u751F\\u6210\\u65B0\\u7684\\u975E\\u654F\\u611F\\u767B\\u5F55\\u4EE3\\u6B21 ID\\uFF0C\\u5E76\\u5728\\u52A0\\u8F7D\\u8FDC\\u7A0B\\u9875\\u9762\\u524D\\u8C03\\u7528 provideAppContext({ ..., sessionKey: \'\\u767B\\u5F55\\u4EE3\\u6B21 ID\' })\\uFF1B\\u4E0D\\u8981\\u4F7F\\u7528 token \\u539F\\u6587\\u3002`,{remote:e.name});if(r.sessionPromise&&r.sessionKey===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(),i=(async()=>{await u,!s.signal.aborted&&await J(e.name,n,{appContext:o,sessionKey:t,signal:s.signal},"onSession")})();return r.sessionPromise=i,i.catch(()=>{r.sessionKey===t&&(r.sessionKey=void 0,r.sessionPromise=void 0)}),i}async function le(e,r){let n=r?.[Te];if(typeof n!="string"||n==="")return;let o=G(e.name);o.setupPromise||(o.setupPromise=ae(e,r,n,o).catch(s=>{throw o.setupPromise=void 0,s})),await o.setupPromise;let t=o.setupExports?.onSession;typeof t=="function"&&await ce(e,o,t)}function ue(){for(let e of U.values()){try{e.controller?.abort()}catch{}e.sessionKey=void 0,e.sessionPromise=void 0}}let M=e=>l[e]??=Object.create(null);function $(e){try{_.onRemoteError?.(e)}catch{}typeof window<"u"&&window.dispatchEvent(new CustomEvent("fulgurjs:error",{detail:e}))}function fe(e="default"){return M(e),l}function F(e,r,n,o,t={}){let s=M(e||"default"),u=Object.hasOwn(s,r)?s[r]:void 0,i=u&&typeof u=="object"?u:void 0;i||(i=Object.create(null),s[r]=i),!(Object.hasOwn(i,n)&&i[n])&&(i[n]={version:n,get:o,from:t.from??"unknown",eager:!!t.eager,loaded:!!t.loaded})}function de(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 X(e){for(let r of e){de(r);let n=f.get(r.name);f.set(r.name,{timeout:H,retries:oe,...n,...r,breakerThreshold:r.breaker?.threshold??n?.breakerThreshold??je,breakerResetMs:r.breaker?.resetMs??n?.breakerResetMs??Ce,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){X([e])}function pe(e){d.push(...e),g.clear(),ie()}function I(e,r,n=!1){let o=r.shareScope||"default",t=r.shareKey||e,u=M(o)[t]||{},i=Object.keys(u).filter(p=>!n||r.singleton||u[p].value!==void 0);if(n&&i.length===0)return;let S=r.requiredVersion,m=i.filter(p=>S===void 0||S===!1||x(p,S)),a;if(r.singleton&&i.length>0){let p=i.filter(h=>u[h].loaded);if(a=[...p.length?p:i].sort(T).pop(),!m.includes(a)){let h=u[a],L=`\\u73B0\\u8C61\\uFF1A\\u5171\\u4EAB\\u5355\\u4F8B "${t}" \\u7684\\u5B9E\\u9645\\u7248\\u672C\\u4E0D\\u6EE1\\u8DB3\\u5F53\\u524D\\u5E94\\u7528\\u8981\\u6C42\\u3002\n\\u539F\\u56E0\\uFF1A\\u5E94\\u7528\\u8981\\u6C42 ${S??"\\u4EFB\\u610F\\u7248\\u672C"}\\uFF0C\\u4F5C\\u7528\\u57DF\\u4E2D\\u6709 ${i.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 ${a}\\u3002\n\\u5F71\\u54CD\\uFF1A\\u53EF\\u80FD\\u51FA\\u73B0\\u72B6\\u6001\\u4E0D\\u4E00\\u81F4\\u6216\\u8FD0\\u884C\\u9519\\u8BEF\\uFF0C\\u5177\\u4F53\\u53D6\\u51B3\\u4E8E\\u4E24\\u7AEF API \\u662F\\u5426\\u517C\\u5BB9\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u7EDF\\u4E00\\u5BBF\\u4E3B\\u4E0E\\u8FDC\\u7A0B\\u7684\\u4F9D\\u8D56\\u7248\\u672C\\uFF0C\\u6216\\u6838\\u5BF9\\u540E\\u8C03\\u6574 shared.requiredVersion\\uFF1B\\u82E5\\u5FC5\\u987B\\u62D2\\u7EDD\\u4E0D\\u517C\\u5BB9\\u7248\\u672C\\uFF0C\\u8BF7\\u542F\\u7528 strictVersion\\u3002`;if(r.strictVersion){let O=new w(E.SHARE_STRICT_VERSION,L,{shareKey:t,requiredVersion:S});throw $({remote:h.from,error:O}),O}let P=`${o}|${t}|${S??"*"}|${a}|${i.join(",")}`;c.has(P)||(c.add(P),console.warn(`[fulgurjs:MFU-010] ${L}`))}}else if(a=[...m].sort(T).pop(),!a){if(r.strictVersion){let p=new w(E.SHARE_STRICT_VERSION,`\\u73B0\\u8C61\\uFF1A\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${o}" \\u4E2D\\u627E\\u4E0D\\u5230\\u7B26\\u5408\\u8981\\u6C42\\u7684 "${t}"\\u3002\n\\u539F\\u56E0\\uFF1A\\u8981\\u6C42\\u7248\\u672C ${S}\\uFF0C\\u5F53\\u524D\\u53EF\\u7528\\u7248\\u672C\\u4E3A ${i.join("\\u3001")||"\\u65E0"}\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u7EDF\\u4E00\\u5BBF\\u4E3B\\u4E0E\\u8FDC\\u7A0B\\u7684\\u4F9D\\u8D56\\u7248\\u672C\\uFF0C\\u6216\\u4FEE\\u6B63 shared.requiredVersion\\u3002`);throw $({remote:t,error:p}),p}return}return u[a]}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=M(t),i=Object.hasOwn(u,s)?u[s]:void 0;if(i&&Object.keys(i).length>0){try{let m=I(e,r);if(m&&m.value===void 0){if(m.version===o)m.value=n,m.loaded=!0;else if(r.singleton&&!m.pendingGet){F(t,s,o,()=>Promise.resolve(n),{from:"fulgurjs:local-fallback",loaded:!0});let a=u[s][o];a.value=n,a.loaded=!0}}}catch{}return}F(t,s,o,()=>Promise.resolve(n),{from:"fulgurjs:local-fallback",loaded:!0});let S=u[s]?.[o];S&&(S.value=n)}async function z(e,r={}){let n=r.shareScope||"default",o=r.shareKey||e,t=M(n)[o]||{},s=y(e,r),u=_.resolveShare?g.get(s):void 0,i=u||I(e,r);if(!i){if(r.fallback){let p=await r.fallback();return W(e,r,p),p}let a=new w(E.SHARE_NOT_AVAILABLE,`\\u73B0\\u8C61\\uFF1A\\u65E0\\u6CD5\\u52A0\\u8F7D\\u5171\\u4EAB\\u4F9D\\u8D56 "${o}"\\u3002\n\\u539F\\u56E0\\uFF1A\\u4F5C\\u7528\\u57DF "${n}" \\u4E2D\\u6CA1\\u6709\\u7B26\\u5408 ${r.requiredVersion??"\\u4EFB\\u610F\\u7248\\u672C"} \\u8981\\u6C42\\u7684\\u7248\\u672C\\uFF0C\\u4E14\\u672A\\u914D\\u7F6E\\u672C\\u5730\\u526F\\u672C\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5728\\u5BBF\\u4E3B\\u6216\\u8FDC\\u7A0B\\u6CE8\\u518C\\u8BE5\\u4F9D\\u8D56\\uFF0C\\u6216\\u4E3A shared \\u914D\\u7F6E\\u53EF\\u7528\\u7684\\u672C\\u5730\\u526F\\u672C\\u3002`,{shareKey:o,requiredVersion:r.requiredVersion});throw $({remote:o,error:a}),a}if(_.resolveShare&&!u){let a=await _.resolveShare({shareKey:o,shareScope:n,requiredVersion:r.requiredVersion,picked:i,available:Object.values(t)});a&&(i=a),g.set(s,i)}if(i.value!==void 0)return g.set(y(e,r),i),i.value;if(i.loaded=!0,!i.pendingGet)try{i.pendingGet=i.get()}catch(a){i.pendingGet=Promise.reject(a)}let S=i.pendingGet,m;try{m=await S}catch(a){if(i.value!==void 0)return g.set(y(e,r),i),i.value;throw i.loaded=!1,g.get(s)===i&&g.delete(s),a}finally{i.pendingGet===S&&(i.pendingGet=void 0)}return i.value===void 0&&(i.value=m),g.set(y(e,r),i),i.value}function ge(e,r={}){return _.resolveShare?g.get(y(e,r))?.value:I(e,r,!0)?.value}function he(e,r,n,o){W(e,{...r,localVersion:n},o)}function ye(e,r){let n=r.shareScope||"default",o=r.shareKey||e;if(_.resolveShare){let s=y(e,r),u=g.get(s);if(u&&u.value!==void 0)return{kind:"ready",value:u.value};let i=u||_.resolveShare({shareKey:o,shareScope:n,requiredVersion:r.requiredVersion,picked:I(e,r),available:Object.values(M(n)[o]||{})});if(i&&typeof i.then=="function")throw Promise.resolve(i).catch(()=>{}),new w(E.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\n\\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\n\\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 S=i;if(S){if(S.value!==void 0)return g.set(y(e,r),S),{kind:"ready",value:S.value};if(S.version!==void 0&&S.version===r.localVersion)return{kind:"local"};throw new w(E.SHARE_NOT_AVAILABLE,`\\u73B0\\u8C61\\uFF1AresolveShare \\u4E3A "${o}" \\u9009\\u62E9\\u4E86\\u672A\\u5C31\\u7EEA\\u7684 ${S.version??"\\u6761\\u76EE"}\\u3002\n\\u539F\\u56E0\\uFF1A\\u540C\\u6B65\\u6D88\\u8D39\\u4E0D\\u80FD\\u7B49\\u5F85\\u52A0\\u8F7D\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5148\\u52A8\\u6001 loadShare \\u518D\\u5BFC\\u5165\\u6D88\\u8D39\\u8005\\uFF0C\\u6216\\u9009\\u62E9\\u5DF2\\u5C31\\u7EEA\\u5B9E\\u4F8B/\\u672C\\u5730\\u7248\\u672C ${r.localVersion??"\\u672A\\u58F0\\u660E"}\\u3002`,{shareKey:o,requiredVersion:r.requiredVersion,syncUnsupported:!0})}}let t=I(e,r);if(!t)return{kind:"local"};if(t.value!==void 0)return{kind:"ready",value:t.value};if(t.version!==void 0&&t.version===r.localVersion)return{kind:"local"};if(r.singleton||r.strictVersion&&r.requiredVersion&&(!r.localVersion||!x(r.localVersion,r.requiredVersion))){if(r.strictVersion||t.pendingGet)throw new w(E.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\n\\u539F\\u56E0\\uFF1A\\u4E0D\\u80FD\\u6539\\u7528\\u4E0D\\u517C\\u5BB9\\u7684\\u672C\\u5730\\u526F\\u672C\\u6216\\u5206\\u88C2\\u5355\\u4F8B\\u3002\n\\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 c.has(s)||(c.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 Se(e){if(_.resolveShare){for(let{name:r,opts:n}of e){let o=y(r,n);if(g.has(o))continue;let t=I(r,n),s=await _.resolveShare({shareKey:n.shareKey||r,shareScope:n.shareScope||"default",requiredVersion:n.requiredVersion,picked:t,available:Object.values(M(n.shareScope||"default")[n.shareKey||r]||{})})||t;s&&g.set(o,s)}for(let{name:r,opts:n}of e)await z(r,n)}}function Y(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 we=e=>new Promise(r=>setTimeout(r,e)),Q=new Set;function D(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:E.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??H,`\\u52A0\\u8F7D\\u8FDC\\u7A0B\\u5165\\u53E3 ${Y(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 w(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 "${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 w(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(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});throw $({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 p=await Z(e.promise(),e.timeout??H,`\\u89E3\\u6790\\u52A8\\u6001\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}"`),h=typeof p=="string"?await ee(p,e):p;return D(h,e),h});else for(let p of[e.entry,...e.fallback??[]])s.push(async()=>{let h=await ee(p,e);return D(h,e),h});let u,i,S=!1,m=r?.retries??e.retries??oe;for(let p of s){for(let h=0;h<=m;h++){let L=performance.now();try{u=await p(),e.lastLoadMs=Math.round(performance.now()-L),e.debug.lastLoadMs=e.lastLoadMs,S=!0;break}catch(P){if(i=P,P?.code)throw P;h<m&&await we(Math.min(Ne,200*2**h)*(1-Ue*(1-2*Math.random())))}}if(S)break}if(!S||!u){let p=Y(e.entry),h=[];throw/^https?:\\/\\//.test(e.entry)&&typeof location<"u"?(h.push(`1. \\u5728\\u6D4F\\u89C8\\u5668\\u6253\\u5F00 ${p}\\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 ${p}\\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 w(E.REMOTE_LOAD_FAILED,`\\u73B0\\u8C61\\uFF1A\\u65E0\\u6CD5\\u4ECE ${p} \\u52A0\\u8F7D\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}"\\u3002\n\\u539F\\u56E0\\uFF1A${String(i?.message??i)}\n\\u4FEE\\u6CD5\\uFF1A\n${h.join(`\n`)}`,{remote:e.name})}D(u,e);let a=N.get(u);if(a&&a!==n)throw new w(E.CONTAINER_REINIT_CONFLICT,`\\u8FDC\\u7A0B\\u5BB9\\u5668 "${e.name}" \\u5DF2\\u4F7F\\u7528\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${a}" \\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(l),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 w)throw $({remote:e.name,error:s}),s;if(s?.code)throw $({remote:e.name,error:s}),s;let u=new w(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 K(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 Ee(e,r){let{remote:n,module:o}=K(e);if(o&&V===n)throw new w(E.SETUP_RECURSION,`\\u73B0\\u8C61\\uFF1A\\u52A0\\u8F7D "${e}" \\u65F6\\uFF0C\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\u7684 setup/onSession \\u53C8\\u540C\\u6B65\\u52A0\\u8F7D\\u4E86\\u81EA\\u8EAB\\u6A21\\u5757\\uFF0C\\u5F62\\u6210\\u5FAA\\u73AF\\u7B49\\u5F85\\u3002\n\\u539F\\u56E0\\uFF1A\\u521D\\u59CB\\u5316\\u5C1A\\u672A\\u5B8C\\u6210\\uFF0C\\u4E0D\\u80FD\\u7B49\\u5F85\\u81EA\\u8EAB\\u7684\\u521D\\u59CB\\u5316\\u7ED3\\u679C\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u4E0D\\u8981\\u5728 setup/onSession \\u4E2D\\u52A0\\u8F7D\\u540C\\u4E00\\u8FDC\\u7A0B\\u7684\\u6A21\\u5757\\uFF1B\\u8BF7\\u5728\\u9875\\u9762\\u7EC4\\u4EF6\\u4E2D\\u52A0\\u8F7D\\uFF0C\\u6216\\u901A\\u8FC7 context \\u89E3\\u8026\\u3002`,{remote:n});try{_.beforeLoadRemote?.({remote:n,module:o})}catch(a){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",a)}let t=f.get(n);if(!t)throw new w(E.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 a=o&&t.manifestUrl?q(e):Promise.resolve();[s]=await Promise.all([re(t,{retries:r?.retries}),a])}catch(a){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`,a),$({remote:n,error:a}),await r.fallbackModule();throw a}if(!o)return s;await le(t,s);let u=G(n).globalComponents,i=r?.consumerApp;if(u&&i&&typeof i.component=="function")for(let a of Object.keys(u))i.component(a,u[a]);let S=`${n}@${t.shareScope||"default"}#${o}`;b.has(S)||b.set(S,s.get(o).catch(a=>{throw b.delete(S),a instanceof w||a?.code?a:new w(E.REMOTE_LOAD_FAILED,`\\u65E0\\u6CD5\\u4ECE\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\u52A0\\u8F7D\\u6A21\\u5757 "${o}"\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(a?.message??a)}\\u3002\\u8BF7\\u6838\\u5BF9 exposes \\u952E\\u548C\\u8FDC\\u7A0B\\u6784\\u5EFA\\u4EA7\\u7269\\u3002`,{remote:n,module:o})}));let m;try{m=await b.get(S)}catch(a){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`,a),$({remote:n,error:a}),await r.fallbackModule();throw a}try{_.afterLoadRemote?.({remote:n,module:o,module_ns:m})}catch(a){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",a)}if(m&&typeof m=="object"&&Object.keys(m).length===0){let a=new w(E.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});$({remote:n,error:a}),console.error(a.message)}return m}function Re(e){let r=f.get(e);if(!r)throw new w(E.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 q(e,r={}){let{remote:n,module:o}=K(e),t=f.get(n);if(!t)throw new w(E.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=(m,a)=>{if(m.sheet)return Promise.resolve();let p=A.get(m);if(p)return p;let h=new Promise(L=>{let P=()=>{m.removeEventListener("load",P),m.removeEventListener("error",O),L()},O=()=>{$({remote:n,error:new w(E.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\u7684\\u6837\\u5F0F\\u8D44\\u6E90\\u52A0\\u8F7D\\u5931\\u8D25\\uFF1A${a}\\u3002\\u8BF7\\u68C0\\u67E5\\u6587\\u4EF6\\u662F\\u5426\\u5B58\\u5728\\u4EE5\\u53CA\\u8DE8\\u57DF\\u548C\\u7F13\\u5B58\\u914D\\u7F6E\\u3002`,{remote:n})}),P()};m.addEventListener("load",P,{once:!0}),m.addEventListener("error",O,{once:!0}),m.sheet&&P()});return A.set(m,h),h},i=(m,a)=>{if(typeof document>"u")return Promise.resolve();let p=document.querySelector(`link[href="${m}"]`);if(p)return a==="style"&&s==="preload"?A.get(p)??Promise.resolve():Promise.resolve();let h=document.createElement("link");h.rel=a==="style"?"stylesheet":"modulepreload",h.href=m,s==="prefetch"&&(h.fetchPriority="low");let L=a==="style"?u(h,m):Promise.resolve();return document.head.appendChild(h),a==="style"&&s==="preload"?L:Promise.resolve()},S=m=>{let a=typeof document<"u"?document.baseURI:void 0,p=new URL(t.entry,a||"http://fulgurjs.invalid/");return!p.pathname.endsWith("/")&&!p.pathname.split("/").pop().includes(".")&&(p.pathname+="/"),new URL(m,p).href};try{if(t.manifestUrl){let m=v.get(t.manifestUrl);m||(m=fetch(t.manifestUrl,{cache:"no-cache",signal:AbortSignal.timeout(8e3)}).then(p=>p.ok?p.json():void 0),v.set(t.manifestUrl,m),m.then(p=>{p||v.delete(t.manifestUrl)},()=>v.delete(t.manifestUrl)));let a=await m;if(a){let p=a.schemaVersion;if(typeof p=="number"&&(!Number.isInteger(p)||p>1)){$({remote:n,error:new w(E.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\u7684 manifest \\u534F\\u8BAE\\u7248\\u672C\\u4E3A ${String(p)}\\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 i(t.entry,"modulepreload");return}await i(t.entry,"modulepreload");let h=a.exposes,L=Array.isArray(h)?h.filter(k=>k&&typeof k=="object").map(k=>[String(k.name??""),k]):h&&typeof h=="object"?Object.entries(h):[],P=o?L.filter(([k,j])=>ne(String(j?.name??k))===o):L,O=[];for(let[,k]of P)if(typeof k?.file=="string"&&await i(S(k.file),"modulepreload"),Array.isArray(k?.css))for(let j of k.css){if(typeof j!="string")continue;let be=i(S(j),"style");s==="preload"&&O.push(be)}await Promise.all(O);return}}await i(t.entry,"modulepreload")}catch(m){$({remote:n,error:new w(E.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${n}" \\u9884\\u52A0\\u8F7D\\u5931\\u8D25\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(m?.message??m)}\\u3002\\u8BF7\\u68C0\\u67E5 manifest \\u548C\\u8D44\\u6E90\\u5730\\u5740\\u3002`,{remote:n})})}}return typeof window>"u"||(window.__FULGURJS_SCOPE__=l,window.__FULGURJS_INFO__={get remotes(){let e={};for(let[r,n]of f)e[r]={...n.debug,entry:n.entry};return e},errors:[]}),{shareScopeMap:l,initSharing:fe,registerShare:F,registerRemotes:X,registerRemote:me,registerPlugins:pe,loadShare:z,loadShareSync:ye,prepareShares:Se,getLoadedShare:ge,pinLoadedShare:he,loadRemote:Ee,getContainer:Re,preloadRemote:q,parseSpec:K,clearSessionState:ue}}var se=globalThis,R=se.__FULGURJS_RUNTIME__??Ve();se.__FULGURJS_RUNTIME__=R;try{Object.freeze(R)}catch{}var Je=te;function Xe(){return R}var We=R.initSharing,ze=R.registerShare,Ye=R.registerRemotes,Ze=R.registerRemote,Qe=R.registerPlugins,er=R.loadShare,rr=R.getLoadedShare,nr=R.prepareShares||(async l=>{for(let{name:f,opts:d}of l)await R.loadShare(f,d)}),tr=R.loadShareSync,or=R.pinLoadedShare,sr=R.loadRemote,ir=R.getContainer,ar=R.preloadRemote,cr=R.parseSpec,lr=R.clearSessionState,ur=R.shareScopeMap;function fr(l){if(l&&typeof l=="object"&&"default"in l){let f=l.default;return f!==void 0?f:l}return l}var dr=R;export{lr as clearSessionState,dr as default,ir as getContainer,rr as getLoadedShare,Xe as getRuntime,We as initSharing,sr as loadRemote,er as loadShare,tr as loadShareSync,cr as parseSpec,or as pinLoadedShare,ar as preloadRemote,nr as prepareShares,Qe as registerPlugins,Ze as registerRemote,Ye as registerRemotes,ze as registerShare,R as runtime,ur as shareScopeMap,fr as unwrapDefault,Je as version};\n';
|
|
2636
2644
|
|
|
2637
2645
|
// src/index.ts
|
|
2638
2646
|
function readRuntimeCode() {
|
package/dist/react-adapter.d.cts
CHANGED
|
@@ -8,8 +8,10 @@ interface LoadRemoteOptions {
|
|
|
8
8
|
fallbackModule?: () => any;
|
|
9
9
|
/**
|
|
10
10
|
* 发起本次加载的消费方应用实例(框架适配器自动传入,业务代码不用手填):
|
|
11
|
-
* Vue 侧 remoteComponent
|
|
11
|
+
* Vue 侧 remoteComponent 捕获当前渲染 app;远程 setup 声明的
|
|
12
12
|
* globalComponents 会在每次加载时幂等注册到它(桥接子应用每次挂载新建 app 也能拿到注册)。
|
|
13
|
+
* 宿主页面适配器(createHostPages)、React 侧与手动 loadRemote 均不传——
|
|
14
|
+
* 页面场景组件解析走宿主自身全局注册表,React 无全局注册表概念。
|
|
13
15
|
* 运行时只在当次调用内消费该引用,不保存、不感知具体框架类型。
|
|
14
16
|
*/
|
|
15
17
|
consumerApp?: unknown;
|
package/dist/react-adapter.d.ts
CHANGED
|
@@ -8,8 +8,10 @@ interface LoadRemoteOptions {
|
|
|
8
8
|
fallbackModule?: () => any;
|
|
9
9
|
/**
|
|
10
10
|
* 发起本次加载的消费方应用实例(框架适配器自动传入,业务代码不用手填):
|
|
11
|
-
* Vue 侧 remoteComponent
|
|
11
|
+
* Vue 侧 remoteComponent 捕获当前渲染 app;远程 setup 声明的
|
|
12
12
|
* globalComponents 会在每次加载时幂等注册到它(桥接子应用每次挂载新建 app 也能拿到注册)。
|
|
13
|
+
* 宿主页面适配器(createHostPages)、React 侧与手动 loadRemote 均不传——
|
|
14
|
+
* 页面场景组件解析走宿主自身全局注册表,React 无全局注册表概念。
|
|
13
15
|
* 运行时只在当次调用内消费该引用,不保存、不感知具体框架类型。
|
|
14
16
|
*/
|
|
15
17
|
consumerApp?: unknown;
|
package/dist/react.d.ts
CHANGED
|
@@ -199,8 +199,10 @@ interface LoadRemoteOptions {
|
|
|
199
199
|
fallbackModule?: () => any;
|
|
200
200
|
/**
|
|
201
201
|
* 发起本次加载的消费方应用实例(框架适配器自动传入,业务代码不用手填):
|
|
202
|
-
* Vue 侧 remoteComponent
|
|
202
|
+
* Vue 侧 remoteComponent 捕获当前渲染 app;远程 setup 声明的
|
|
203
203
|
* globalComponents 会在每次加载时幂等注册到它(桥接子应用每次挂载新建 app 也能拿到注册)。
|
|
204
|
+
* 宿主页面适配器(createHostPages)、React 侧与手动 loadRemote 均不传——
|
|
205
|
+
* 页面场景组件解析走宿主自身全局注册表,React 无全局注册表概念。
|
|
204
206
|
* 运行时只在当次调用内消费该引用,不保存、不感知具体框架类型。
|
|
205
207
|
*/
|
|
206
208
|
consumerApp?: unknown;
|
|
@@ -333,7 +335,7 @@ declare const registerRemotes: (list: RemoteConfig[]) => void;
|
|
|
333
335
|
declare const registerRemote: (remote: RemoteConfig) => void;
|
|
334
336
|
declare const registerPlugins: (list: RuntimePlugin[]) => void;
|
|
335
337
|
declare const loadShare: (name: string, opts?: LoadShareOptions) => Promise<any>;
|
|
336
|
-
/** CJS
|
|
338
|
+
/** 同步读取已就绪共享实例(高级诊断用,公开导出;CJS 垫片同源复用) */
|
|
337
339
|
declare const getLoadedShare: (name: string, opts?: LoadShareOptions) => any;
|
|
338
340
|
declare const pinLoadedShare: (name: string, opts: LoadShareOptions, localVersion: string, instance: unknown) => void;
|
|
339
341
|
declare const loadRemote: <T = Record<string, any>>(spec: string, opts?: LoadRemoteOptions) => Promise<T>;
|
package/dist/runtime-entry.d.ts
CHANGED
|
@@ -51,8 +51,10 @@ interface LoadRemoteOptions {
|
|
|
51
51
|
fallbackModule?: () => any;
|
|
52
52
|
/**
|
|
53
53
|
* 发起本次加载的消费方应用实例(框架适配器自动传入,业务代码不用手填):
|
|
54
|
-
* Vue 侧 remoteComponent
|
|
54
|
+
* Vue 侧 remoteComponent 捕获当前渲染 app;远程 setup 声明的
|
|
55
55
|
* globalComponents 会在每次加载时幂等注册到它(桥接子应用每次挂载新建 app 也能拿到注册)。
|
|
56
|
+
* 宿主页面适配器(createHostPages)、React 侧与手动 loadRemote 均不传——
|
|
57
|
+
* 页面场景组件解析走宿主自身全局注册表,React 无全局注册表概念。
|
|
56
58
|
* 运行时只在当次调用内消费该引用,不保存、不感知具体框架类型。
|
|
57
59
|
*/
|
|
58
60
|
consumerApp?: unknown;
|
|
@@ -185,7 +187,7 @@ declare const registerRemotes: (list: RemoteConfig[]) => void;
|
|
|
185
187
|
declare const registerRemote: (remote: RemoteConfig) => void;
|
|
186
188
|
declare const registerPlugins: (list: RuntimePlugin[]) => void;
|
|
187
189
|
declare const loadShare: (name: string, opts?: LoadShareOptions) => Promise<any>;
|
|
188
|
-
/** CJS
|
|
190
|
+
/** 同步读取已就绪共享实例(高级诊断用,公开导出;CJS 垫片同源复用) */
|
|
189
191
|
declare const getLoadedShare: (name: string, opts?: LoadShareOptions) => any;
|
|
190
192
|
declare const pinLoadedShare: (name: string, opts: LoadShareOptions, localVersion: string, instance: unknown) => void;
|
|
191
193
|
declare const loadRemote: <T = Record<string, any>>(spec: string, opts?: LoadRemoteOptions) => Promise<T>;
|
package/dist/runtime.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var ve=/^v?(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:-((?:[0-9A-Za-z-]+)(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z.-]+)?$/;function C(l){let f=ve.exec(String(l).trim());return f?{major:Number(f[1]),minor:Number(f[2]??0),patch:Number(f[3]??0),pre:f[4]?f[4].split("."):[]}:null}function $e(l,f){if(l.length===0&&f.length===0)return 0;if(l.length===0)return 1;if(f.length===0)return-1;let d=Math.max(l.length,f.length);for(let c=0;c<d;c++){let g=l[c],y=f[c];if(g===void 0)return-1;if(y===void 0)return 1;let b=/^\d+$/.test(g),v=/^\d+$/.test(y);if(b&&v){let A=Number(g)-Number(y);if(A!==0)return A}else{if(b!==v)return b?-1:1;if(g!==y)return g<y?-1:1}}return 0}function T(l,f){let d=C(l),c=C(f);return!d||!c?l<f?-1:l>f?1:0:d.major!==c.major?d.major-c.major:d.minor!==c.minor?d.minor-c.minor:d.patch!==c.patch?d.patch-c.patch:$e(d.pre,c.pre)}var Pe=/^[a-z]+[+:-]/i;function x(l,f){if(f===!1||f==null||f==="")return!0;let d=String(f).trim();return!d||d==="*"||d==="latest"||Pe.test(d)?!0:d.split("||").some(c=>_e(l,c.trim()))}function _e(l,f){if(!f||f==="*")return!C(l)?.pre.length;let d=f.split(/\s+-\s+/);if(d.length===2){let y=d[0].trim(),b=d[1].trim();return!(!x(l,`>=${y}`)||!x(l,`<=${b}`))}let c=C(l);if(!c)return!1;let g=ke(f);if(g===null)return!0;for(let y of g)if(!Ie(c,l,y))return!1;return!(c.pre.length>0&&!g.some(y=>y.ver.pre.length>0)&&!g.some(b=>b.ver.major===c.major&&b.ver.minor===c.minor&&b.ver.patch===c.patch))}function ke(l){let f=[],d=l.trim().split(/\s+/).filter(Boolean);if(d.length===0)return null;for(let c of d){let g=/^(>=|<=|>|<|=|\^|~)?(.*)$/.exec(c);if(!g)return null;let y=g[1],b=g[2],v=Le(y,b);if(v===null)return null;f.push(...v)}return f}function Le(l,f){let d=Me(f);if(!d)return null;let{ver:c,partial:g}=d;switch(l){case"^":{let y=Oe(c);return y?[{op:">=",ver:c},{op:"<",ver:y}]:null}case"~":{let y=g>=2?{major:c.major,minor:c.minor+1,patch:0,pre:[]}:{major:c.major+1,minor:0,patch:0,pre:[]};return[{op:">=",ver:c},{op:"<",ver:y}]}case">=":return[{op:">=",ver:c}];case">":return g===1?[{op:">=",ver:{major:c.major+1,minor:0,patch:0,pre:[]}}]:g===2?[{op:">=",ver:{major:c.major,minor:c.minor+1,patch:0,pre:[]}}]:[{op:">",ver:c}];case"<":return g===1?[{op:"<",ver:{major:c.major,minor:0,patch:0,pre:[]}}]:g===2?[{op:"<",ver:{major:c.major,minor:c.minor,patch:0,pre:[]}}]:[{op:"<",ver:c}];case"<=":return[{op:"<=",ver:c}];case"=":case void 0:return g===1?[{op:">=",ver:c},{op:"<",ver:{major:c.major+1,minor:0,patch:0,pre:[]}}]:g===2?[{op:">=",ver:c},{op:"<",ver:{major:c.major,minor:c.minor+1,patch:0,pre:[]}}]:[{op:"=",ver:c}];default:return null}}function Oe(l){return l.major>0?{major:l.major+1,minor:0,patch:0,pre:[]}:l.minor>0?{major:0,minor:l.minor+1,patch:0,pre:[]}:{major:0,minor:0,patch:l.patch+1,pre:[]}}function Me(l){let f=l.replace(/^v/,"").trim();if(!f||f==="*"||f==="x"||f==="X")return{ver:{major:0,minor:0,patch:0,pre:[]},partial:0};let d=f.split("."),c=[],g=0;for(let v of d.slice(0,3))if(/^\d+$/.test(v))c.push(Number(v)),g++;else{if(v==="x"||v==="X"||v==="*")break;break}let y=f.split("-"),b=y.length>1?y.slice(1).join("-").split("+")[0].split("."):[];return g===0&&b.length===0?{ver:{major:0,minor:0,patch:0,pre:[]},partial:0}:{ver:{major:c[0]??0,minor:c[1]??0,patch:c[2]??0,pre:b},partial:g}}function Ae(l,f){switch(f){case">=":return l>=0;case">":return l>0;case"<":return l<0;case"<=":return l<=0;case"=":return l===0}}function Ie(l,f,d){let c=`${l.major}.${l.minor}.${l.patch}`+(l.pre.length?`-${l.pre.join(".")}`:"");if(d.upper)return!(!(T(c,`${d.ver.major}.${d.ver.minor}.${d.ver.patch}`+(d.ver.pre.length?`-${d.ver.pre.join(".")}`:""))>=0)||!(T(c,`${d.upper.major}.${d.upper.minor}.${d.upper.patch}`)<0));let g=T(c,`${d.ver.major}.${d.ver.minor}.${d.ver.patch}`+(d.ver.pre.length?`-${d.ver.pre.join(".")}`:"")),y=Ae(g,d.op);return d.ver.pre.length>0&&l.pre.length===0&&(d.op===">"||d.op==="<")?!1:y}var w=class extends Error{code;details;constructor(f,d,c,g){super(`[fulgurjs:${f}] ${d}`,g),this.name="FgError",this.code=f,this.details=c}},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 te="6.1.
|
|
1
|
+
var ve=/^v?(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:-((?:[0-9A-Za-z-]+)(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z.-]+)?$/;function C(l){let f=ve.exec(String(l).trim());return f?{major:Number(f[1]),minor:Number(f[2]??0),patch:Number(f[3]??0),pre:f[4]?f[4].split("."):[]}:null}function $e(l,f){if(l.length===0&&f.length===0)return 0;if(l.length===0)return 1;if(f.length===0)return-1;let d=Math.max(l.length,f.length);for(let c=0;c<d;c++){let g=l[c],y=f[c];if(g===void 0)return-1;if(y===void 0)return 1;let b=/^\d+$/.test(g),v=/^\d+$/.test(y);if(b&&v){let A=Number(g)-Number(y);if(A!==0)return A}else{if(b!==v)return b?-1:1;if(g!==y)return g<y?-1:1}}return 0}function T(l,f){let d=C(l),c=C(f);return!d||!c?l<f?-1:l>f?1:0:d.major!==c.major?d.major-c.major:d.minor!==c.minor?d.minor-c.minor:d.patch!==c.patch?d.patch-c.patch:$e(d.pre,c.pre)}var Pe=/^[a-z]+[+:-]/i;function x(l,f){if(f===!1||f==null||f==="")return!0;let d=String(f).trim();return!d||d==="*"||d==="latest"||Pe.test(d)?!0:d.split("||").some(c=>_e(l,c.trim()))}function _e(l,f){if(!f||f==="*")return!C(l)?.pre.length;let d=f.split(/\s+-\s+/);if(d.length===2){let y=d[0].trim(),b=d[1].trim();return!(!x(l,`>=${y}`)||!x(l,`<=${b}`))}let c=C(l);if(!c)return!1;let g=ke(f);if(g===null)return!0;for(let y of g)if(!Ie(c,l,y))return!1;return!(c.pre.length>0&&!g.some(y=>y.ver.pre.length>0)&&!g.some(b=>b.ver.major===c.major&&b.ver.minor===c.minor&&b.ver.patch===c.patch))}function ke(l){let f=[],d=l.trim().split(/\s+/).filter(Boolean);if(d.length===0)return null;for(let c of d){let g=/^(>=|<=|>|<|=|\^|~)?(.*)$/.exec(c);if(!g)return null;let y=g[1],b=g[2],v=Le(y,b);if(v===null)return null;f.push(...v)}return f}function Le(l,f){let d=Me(f);if(!d)return null;let{ver:c,partial:g}=d;switch(l){case"^":{let y=Oe(c);return y?[{op:">=",ver:c},{op:"<",ver:y}]:null}case"~":{let y=g>=2?{major:c.major,minor:c.minor+1,patch:0,pre:[]}:{major:c.major+1,minor:0,patch:0,pre:[]};return[{op:">=",ver:c},{op:"<",ver:y}]}case">=":return[{op:">=",ver:c}];case">":return g===1?[{op:">=",ver:{major:c.major+1,minor:0,patch:0,pre:[]}}]:g===2?[{op:">=",ver:{major:c.major,minor:c.minor+1,patch:0,pre:[]}}]:[{op:">",ver:c}];case"<":return g===1?[{op:"<",ver:{major:c.major,minor:0,patch:0,pre:[]}}]:g===2?[{op:"<",ver:{major:c.major,minor:c.minor,patch:0,pre:[]}}]:[{op:"<",ver:c}];case"<=":return[{op:"<=",ver:c}];case"=":case void 0:return g===1?[{op:">=",ver:c},{op:"<",ver:{major:c.major+1,minor:0,patch:0,pre:[]}}]:g===2?[{op:">=",ver:c},{op:"<",ver:{major:c.major,minor:c.minor+1,patch:0,pre:[]}}]:[{op:"=",ver:c}];default:return null}}function Oe(l){return l.major>0?{major:l.major+1,minor:0,patch:0,pre:[]}:l.minor>0?{major:0,minor:l.minor+1,patch:0,pre:[]}:{major:0,minor:0,patch:l.patch+1,pre:[]}}function Me(l){let f=l.replace(/^v/,"").trim();if(!f||f==="*"||f==="x"||f==="X")return{ver:{major:0,minor:0,patch:0,pre:[]},partial:0};let d=f.split("."),c=[],g=0;for(let v of d.slice(0,3))if(/^\d+$/.test(v))c.push(Number(v)),g++;else{if(v==="x"||v==="X"||v==="*")break;break}let y=f.split("-"),b=y.length>1?y.slice(1).join("-").split("+")[0].split("."):[];return g===0&&b.length===0?{ver:{major:0,minor:0,patch:0,pre:[]},partial:0}:{ver:{major:c[0]??0,minor:c[1]??0,patch:c[2]??0,pre:b},partial:g}}function Ae(l,f){switch(f){case">=":return l>=0;case">":return l>0;case"<":return l<0;case"<=":return l<=0;case"=":return l===0}}function Ie(l,f,d){let c=`${l.major}.${l.minor}.${l.patch}`+(l.pre.length?`-${l.pre.join(".")}`:"");if(d.upper)return!(!(T(c,`${d.ver.major}.${d.ver.minor}.${d.ver.patch}`+(d.ver.pre.length?`-${d.ver.pre.join(".")}`:""))>=0)||!(T(c,`${d.upper.major}.${d.upper.minor}.${d.upper.patch}`)<0));let g=T(c,`${d.ver.major}.${d.ver.minor}.${d.ver.patch}`+(d.ver.pre.length?`-${d.ver.pre.join(".")}`:"")),y=Ae(g,d.op);return d.ver.pre.length>0&&l.pre.length===0&&(d.op===">"||d.op==="<")?!1:y}var w=class extends Error{code;details;constructor(f,d,c,g){super(`[fulgurjs:${f}] ${d}`,g),this.name="FgError",this.code=f,this.details=c}},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 te="6.1.3";var Te="__fulgurjsSetup",xe="__FULGURJS_APP_CONFIG__",H=15e3,oe=2,je=5,Ce=3e4,Ne=4e3,Ue=.2;function Ve(){let l=Object.create(null),f=new Map,d=[],c=new Set,g=new Map,y=(e,r)=>JSON.stringify([r.shareScope||"default",r.shareKey||e,r.requiredVersion??null,!!r.singleton,!!r.strictVersion]),b=new Map,v=new Map,A=new WeakMap,N=new WeakMap,_={},ie=()=>{for(let e of d)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)}},U=new Map,V,G=e=>{let r=U.get(e);return r||U.set(e,r={}),r},B=()=>globalThis[xe]??{};async function J(e,r,n,o){let t=u=>u instanceof w?u:new w(E.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
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});V=e;let s;try{s=r(n)}catch(u){throw t(u)}finally{V=void 0}try{await s}catch(u){throw t(u)}}async function ae(e,r,n,o){e.debug.setup="pending";try{if(e.manifestUrl)try{await q(`${e.name}/${n}`)}catch{}let t=await r.get(n),s=t?.default;if(typeof s!="function")throw new w(E.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\u5E94\u4E3A\u51FD\u6570\u3002
|
package/dist/vue.d.ts
CHANGED
|
@@ -276,8 +276,10 @@ interface LoadRemoteOptions {
|
|
|
276
276
|
fallbackModule?: () => any;
|
|
277
277
|
/**
|
|
278
278
|
* 发起本次加载的消费方应用实例(框架适配器自动传入,业务代码不用手填):
|
|
279
|
-
* Vue 侧 remoteComponent
|
|
279
|
+
* Vue 侧 remoteComponent 捕获当前渲染 app;远程 setup 声明的
|
|
280
280
|
* globalComponents 会在每次加载时幂等注册到它(桥接子应用每次挂载新建 app 也能拿到注册)。
|
|
281
|
+
* 宿主页面适配器(createHostPages)、React 侧与手动 loadRemote 均不传——
|
|
282
|
+
* 页面场景组件解析走宿主自身全局注册表,React 无全局注册表概念。
|
|
281
283
|
* 运行时只在当次调用内消费该引用,不保存、不感知具体框架类型。
|
|
282
284
|
*/
|
|
283
285
|
consumerApp?: unknown;
|
|
@@ -410,7 +412,7 @@ declare const registerRemotes: (list: RemoteConfig[]) => void;
|
|
|
410
412
|
declare const registerRemote: (remote: RemoteConfig) => void;
|
|
411
413
|
declare const registerPlugins: (list: RuntimePlugin[]) => void;
|
|
412
414
|
declare const loadShare: (name: string, opts?: LoadShareOptions) => Promise<any>;
|
|
413
|
-
/** CJS
|
|
415
|
+
/** 同步读取已就绪共享实例(高级诊断用,公开导出;CJS 垫片同源复用) */
|
|
414
416
|
declare const getLoadedShare: (name: string, opts?: LoadShareOptions) => any;
|
|
415
417
|
declare const pinLoadedShare: (name: string, opts: LoadShareOptions, localVersion: string, instance: unknown) => void;
|
|
416
418
|
declare const loadRemote: <T = Record<string, any>>(spec: string, opts?: LoadRemoteOptions) => Promise<T>;
|
package/docs/en/reference/api.md
CHANGED
|
@@ -343,7 +343,7 @@ Fixed contract:
|
|
|
343
343
|
| Trigger entry | `loadRemote('remote/module')` is the **unified entry** (`remoteComponent` and the host page adapters share the same source). `loadRemote('remote')`, `getContainer()`, `preloadRemote()`, and calling `container.get()` directly all **do not run** initialization |
|
|
344
344
|
| Timing | Container acquired → `init(shareScope)` (shared scope adoption) → **setup** → **onSession** → **globalComponents install** → business module returned. The setup module's own imports complete their shared negotiation at that stage |
|
|
345
345
|
| Execution count (setup) | Once per container; concurrent calls share one Promise; never repeated after success. `preloadRemote` only prefetches resources and never executes |
|
|
346
|
-
| Execution count (globalComponents) | Declaration is extracted once with setup; **installation runs on every `loadRemote`** (idempotent — `app.component` same-name overwrite) so bridge child apps that create a fresh app instance per mount also receive the registration.
|
|
346
|
+
| Execution count (globalComponents) | Declaration is extracted once with setup; **installation runs on every `loadRemote`** (idempotent — `app.component` same-name overwrite, later registration wins) so bridge child apps that create a fresh app instance per mount also receive the registration. Currently only the Vue `remoteComponent` captures the consumer app automatically; a manual `loadRemote`, `createHostPages` page loads, and the React side all omit it (pages/React resolve components against the host's own global registry; React has no global-registry concept) — installation is skipped without error. Registrations live for the consumer app's lifetime; there is no separate uninstall API |
|
|
347
347
|
| Execution count (onSession) | Deduplicated by the non-sensitive `sessionKey`: once per login generation; a new generation first invalidates the old `signal`, then chains the old call and the new call **serially** per remote (preventing two accounts' async writes from interleaving); `clearAppContext()` invalidates the dedup state, forcing a rerun on the next login. App-level setup does not re-run on logout/generation switch |
|
|
348
348
|
| sessionKey | The host login flow generates a new generation on every successful login/re-login (non-sensitive ID, never a token); kept when a token refreshes but the session does not. **onSession present but sessionKey missing → MFU-013**; identity is never guessed from a user object reference; remotes without onSession need no sessionKey |
|
|
349
349
|
| Export validation | Must default-export a function; the named `onSession` is optional and must be a function; `globalComponents` is optional and must be an object (key = registered name, value = component). Violations → MFU-011 (reports actual type / expected signature / fix) |
|
|
@@ -445,7 +445,7 @@ The channel parameter the host passes to the bridge component: `routing: BridgeH
|
|
|
445
445
|
- **Navigation and errors**: sub app push/replace preserve the original action; go/back/forward delegate to host history; consecutive requests settle serially, and external navigation invalidates old in-flight and queued requests; guard/loader/port execution errors reject the Promise (MFU-033, cause preserved), never disguised as cancelled;
|
|
446
446
|
- **Session and lifecycle**: `sessionKey→null` invalidates the old channel — navigation on the old channel is always cancelled, writes no URL, and never revives the sub app; the channel is destroyed after unmount (re-subscribing yields MFU-031); KeepAlive-cached off-page instances pause route writes (re-syncing on activation); the persistent lockout of a container whose unmount threw cannot be bypassed via routing;
|
|
447
447
|
- **Protocol validation**: the host enables routing while the child app did not declare `{ routing: true }` → the `MFU-031` placeholder, **never silently falling back to memory while pretending the deep link worked**;
|
|
448
|
-
- **Illegal navigation and loops**: targets outside the sub app's own prefix (`../`, across prefixes) and illegal `go` arguments → `MFU-032`; more than 5 consecutive internal replaces (a redirect loop) → `MFU-033` (with the target chain attached; never silently back to the entry);
|
|
448
|
+
- **Illegal navigation and loops**: targets outside the sub app's own prefix (`../`, across prefixes), targets already containing the basePath (duplicated prefix) and illegal `go` arguments → `MFU-032`; more than 5 consecutive internal replaces (a redirect loop) → `MFU-033` (with the target chain attached; never silently back to the entry);
|
|
449
449
|
- **Lazy loading**: the default `/vue` and `/react` entries pull in no router library; the route-sync APIs only type-import the router libraries plus module-level on-demand prewarming;
|
|
450
450
|
- **Not promised**: SSR/RSC, cross-browser windows, route proxying for nested multi-level bridge child apps, TanStack Router and other router libraries (custom extension via the `BridgeHostNavigation`/`BridgeChildRoute` ports is possible).
|
|
451
451
|
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
| `MFU-017` | Runtime reports bridge session parameters inconsistent with AppContext | The controlled `sessionKey` contradicts the global session (a getContext snapshot mismatch), an illegal value (empty string/number), or a page-level single-session conflict (generations mismatch across instances) | Unify the session across the page's controlled bridge instances; sessionKey takes only non-empty string/null/omitted; on generation switch follow "first null to unmount, clearAppContext, then write the new generation" |
|
|
70
70
|
| `MFU-030` | Bridge route sync configuration/prefix conflict error | Illegal basePath (empty/root/with query·hash·wildcard) or overlapping prefixes registered on one page | basePath is a static absolute path from the host routing perspective (e.g. `/approval`); prefixes of sync instances on one page must not overlap |
|
|
71
71
|
| `MFU-031` | Bridge reports a missing route protocol / dead channel | The host enabled routing but the child app did not declare `{ routing: true }`; or the channel was reused/re-subscribed after destruction | Declare `{ routing: true }` in the child app contract's second parameter and wire from `ctx.routing`; never revive an old channel after a session switch/unmount |
|
|
72
|
-
| `MFU-032` | Bridge reports an illegal navigation | The sub app navigates outside its own prefix (`../`, across prefixes), an illegal `go` argument, or a request on a dead channel | The sub app only navigates
|
|
72
|
+
| `MFU-032` | Bridge reports an illegal navigation | The sub app navigates outside its own prefix (`../`, across prefixes), its target already contains the basePath (duplicated prefix — the host URL would stack into `/x/x/...`), an illegal `go` argument, or a request on a dead channel | The sub app only navigates logical paths inside its own basePath (without the basePath; the error message suggests the de-prefixed target); `go` takes legal integers; issue no navigation after the channel is invalidated |
|
|
73
73
|
| `MFU-033` | Bridge reports route preparation/sync failure (with the target chain/cause; never silently falls back to memory) | Guard/loader/port execution errors rejected, or more than 5 consecutive internal replaces (a redirect loop) | Fix the child app guard/loader errors; hunt down the redirect loop (cyclic redirects in the sub app's route definitions) |
|
|
74
74
|
|
|
75
75
|
#### CC cross-app context
|
package/docs/zh/reference/api.md
CHANGED
|
@@ -339,7 +339,7 @@ export const globalComponents: RemoteSetupModule['globalComponents'] = {
|
|
|
339
339
|
| 触发入口 | `loadRemote('remote/模块')` 是**统一入口**(`remoteComponent` 与宿主页面适配器同源)。`loadRemote('remote')`、`getContainer()`、`preloadRemote()`、直调 `container.get()` 都**不执行**初始化 |
|
|
340
340
|
| 时序 | 取得容器 → `init(shareScope)`(共享作用域收养)→ **setup** → **onSession** → **globalComponents 安装** → 返回业务模块。setup 模块自身的导入在该阶段完成共享协商 |
|
|
341
341
|
| 执行次数(setup) | 每容器一次;并发调用共享同一 Promise;成功后不重复。`preloadRemote` 只预取资源不执行 |
|
|
342
|
-
| 执行次数(globalComponents) | 声明提取随 setup 一次;**安装随每次 `loadRemote` 执行**(幂等,`app.component`
|
|
342
|
+
| 执行次数(globalComponents) | 声明提取随 setup 一次;**安装随每次 `loadRemote` 执行**(幂等,`app.component` 同名覆盖,后注册生效)——桥接子应用每次挂载新建 app 实例也能拿到注册。当前仅 Vue `remoteComponent` 自动捕获消费方 app;手动 `loadRemote`、`createHostPages` 页面加载与 React 侧均不传(页面/React 场景组件解析走宿主自身全局注册表,React 无全局注册表概念)——跳过安装,不报错。注册随消费方 app 生命周期驻留,无独立卸载 API |
|
|
343
343
|
| 执行次数(onSession) | 按非敏感 `sessionKey` 去重:同一登录代次一次;新代次先作废旧 `signal`,再按远程**串行**衔接旧调用与新调用(防两账号异步写入交错);`clearAppContext()` 失效去重状态,下次登录必须重跑。应用级 setup 不因退出/换代重复执行 |
|
|
344
344
|
| sessionKey | 宿主登录流程每次成功登录/重登生成新代次(非敏感 ID,禁止用 token);token 刷新但会话未变时沿用。**有 onSession 却缺 sessionKey → MFU-013**,不凭用户对象引用猜测身份;无 onSession 的远程无需 sessionKey |
|
|
345
345
|
| 导出校验 | 必须默认导出函数;具名 `onSession` 可选且必须是函数;`globalComponents` 可选且必须是对象(键=注册名,值=组件)。违反 → MFU-011(报实际类型/预期签名/修法) |
|
|
@@ -428,7 +428,7 @@ const RemoteVueApp = createReactBridgeApp<P>('vue-remote/bridge', {
|
|
|
428
428
|
| `createVueBridgeNavigation` | `(router: VueRouterLike) => BridgeHostNavigation` | Vue 宿主导航端口。Vue Router fullPath 已是逻辑路径,无需传部署 base。Vue Router 4,history/hash 模式皆可 |
|
|
429
429
|
| `createReactBridgeNavigation` | `(navigate, { basename?, canNavigate? }) => BridgeHostNavigation` | React 宿主导航端口。**仅支持 data router**(`createBrowserRouter`/`createHashRouter` + `RouterProvider`);declarative 模式(BrowserRouter)无取消语义,不支持。React Router ≥ 6.11。`canNavigate` 可选仅作提前拒绝;端口观察真实 blocker 状态,等待 `reset()` 返回 cancelled、`proceed()` 后实际位置提交返回 committed,不能只凭 navigate 的 Promise 落定判成功 |
|
|
430
430
|
| `connectVueBridgeRouter` | `(routing: BridgeChildRouting, router: Router, { signal? }) => { ready: Promise, dispose(): void }` | Vue 子应用接线受控 memory 路由;`await …ready` 落定后再 `app.use(router)`(顺序不能反) |
|
|
431
|
-
| `createReactBridgeRouter` | `(routing, routes, { signal? }) => { element, dispose(), routerReady }` | React 子应用:返回 `RouterProvider` 元素直接作契约产物。`routerReady: Promise<Router>` 是已接线 memory router 的就绪合同(6.0.0 起):fast 路径(模块级预热已就绪,常见)返回**同步已 resolve** 的 Promise,resolve 值与 `element.props.router` 等价;slow 路径(预热未落定的罕见竞态)在惰性宿主接线完成时 resolve,缺 react-router-
|
|
431
|
+
| `createReactBridgeRouter` | `(routing, routes, { signal? }) => { element, dispose(), routerReady }` | React 子应用:返回 `RouterProvider` 元素直接作契约产物。`routerReady: Promise<Router>` 是已接线 memory router 的就绪合同(6.0.0 起):fast 路径(模块级预热已就绪,常见)返回**同步已 resolve** 的 Promise,resolve 值与 `element.props.router` 等价;slow 路径(预热未落定的罕见竞态)在惰性宿主接线完成时 resolve,缺 react-router-dom 时 reject 清晰错误。宿主内省/断言请优先 `await routerReady`,不要假设 `element.props.router` 同步存在。`dispose()` 幂等销毁接线(signal 触发时自动调用);已 dispose 后迟到任务不写状态 |
|
|
432
432
|
|
|
433
433
|
宿主传给桥接组件的通道参数:`routing: BridgeHostRouting = { basePath: '/approval', navigation }`;子应用契约第二参数声明 `{ routing: true }` 后从 `ctx.routing` 接收通道。两端接线第三参数 `{ signal?: AbortSignal }` 默认为空;推荐传 `ctx.signal` 自动 dispose,未传时由子应用显式调用 `dispose()`。自定义 `BridgeHostNavigation.navigate(target, action, { signal })` 应在异步提交前复核可选 signal,已 aborted 时禁止迟到写入。
|
|
434
434
|
|
|
@@ -441,7 +441,7 @@ const RemoteVueApp = createReactBridgeApp<P>('vue-remote/bridge', {
|
|
|
441
441
|
- **导航与错误**:子应用 push/replace 保留原动作,go/back/forward 委托宿主历史;连续请求串行落定,外部导航作废旧的在飞与排队请求;守卫/加载器/端口执行异常拒绝 Promise(MFU-033,保留 cause),不伪装 cancelled;
|
|
442
442
|
- **会话与生命周期**:`sessionKey→null` 作废旧通道——旧通道导航一律 cancelled、不写 URL、不复活子应用;unmount 后通道销毁(再订阅得 MFU-031);KeepAlive 缓存离页实例暂停路由写入(激活重同步);unmount 抛错的持久封锁不因路由绕过;
|
|
443
443
|
- **协议校验**:宿主启用 routing 而子应用未声明 `{ routing: true }` → `MFU-031` 占位,**不静默退回 memory 假装深链成功**;
|
|
444
|
-
-
|
|
444
|
+
- **非法导航与循环**:目标越界自身前缀(`../`、跨前缀)、目标已含 basePath(重复前缀)、非法 `go` 参数 → `MFU-032`;连续内部 replace 超过 5 次(重定向环)→ `MFU-033`(附目标链,不静默回入口);
|
|
445
445
|
- **按需加载**:`/vue`、`/react` 默认入口不引入任何路由库;路由同步 API 对路由库仅类型导入 + 模块级按需预热;
|
|
446
446
|
- **不承诺**:SSR/RSC、跨浏览器窗口、嵌套多级桥接子应用路由代理、TanStack Router 及其他路由库(可经 `BridgeHostNavigation`/`BridgeChildRoute` 端口自定义扩展)。
|
|
447
447
|
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
| `MFU-017` | 运行时报桥接会话参数与 AppContext 不一致 | 受控 `sessionKey` 与全局会话矛盾(getContext 快照不一致)、非法值(空串/数字)、或页面级单会话冲突(多实例代次不一致) | 同页受控桥接实例统一会话;sessionKey 只用 非空字符串/null/省略 三态;换代按「先 null 卸载、clearAppContext、再写新代次」顺序 |
|
|
70
70
|
| `MFU-030` | 桥接路由同步配置/前缀冲突报错 | basePath 非法(空/根/带 query·hash·通配)或同页重叠前缀登记 | basePath 用宿主路由视角的静态绝对路径(如 `/approval`);同页各同步实例前缀不重叠 |
|
|
71
71
|
| `MFU-031` | 桥接报路由协议缺失/通道失效 | 宿主启用 routing 但子应用未声明 `{ routing: true }`;或通道销毁后复用/再订阅 | 子应用契约第二参数声明 `{ routing: true }` 并从 `ctx.routing` 接线;换会话/卸载后不复活旧通道 |
|
|
72
|
-
| `MFU-032` | 桥接报非法导航 |
|
|
72
|
+
| `MFU-032` | 桥接报非法导航 | 子应用导航目标越界自身前缀(`../`、跨前缀)、目标已含 basePath(重复前缀,宿主 URL 会叠加成 `/x/x/...`)、非法 `go` 参数、或失效通道的请求 | 子应用只导航自身 basePath 内的逻辑路径(不含 basePath,错误信息附去掉前缀后的目标);go 参数用合法整数;通道作废后不再发起导航 |
|
|
73
73
|
| `MFU-033` | 桥接报路由准备/同步失败(附目标链/cause,不静默回退 memory) | 守卫/加载器/端口执行异常拒绝、或连续内部 replace 超过 5 次(重定向环) | 修复子应用守卫/加载器异常;排查重定向环(子应用路由定义的循环重定向) |
|
|
74
74
|
|
|
75
75
|
#### CC 跨应用上下文
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# fulgurjs-federation 模板(examples/templates/)
|
|
2
2
|
|
|
3
|
-
五个可独立复制、`pnpm install` 后直接运行的联邦接入模板。全部使用 **npm registry 正式包** `@fulgurjs/federation@6.1.
|
|
3
|
+
五个可独立复制、`pnpm install` 后直接运行的联邦接入模板。全部使用 **npm registry 正式包** `@fulgurjs/federation@6.1.2`(精确版本 + pnpm 锁文件;6.0.0 起统一入口 /vue、/react、/runtime——模板代码即统一入口用法),不依赖本仓库源码、workspace 或父目录。
|
|
4
4
|
|
|
5
5
|
## 获取模板的两种方式
|
|
6
6
|
|
|
@@ -11,8 +11,8 @@ importers:
|
|
|
11
11
|
react-host:
|
|
12
12
|
dependencies:
|
|
13
13
|
'@fulgurjs/federation':
|
|
14
|
-
specifier: 6.1.
|
|
15
|
-
version: 6.1.
|
|
14
|
+
specifier: 6.1.2
|
|
15
|
+
version: 6.1.2(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(vite@6.4.3)(vue-router@4.6.4(vue@3.5.43(typescript@5.9.3)))(vue@3.5.43(typescript@5.9.3))
|
|
16
16
|
react:
|
|
17
17
|
specifier: ^19.1.0
|
|
18
18
|
version: 19.3.0
|
|
@@ -42,8 +42,8 @@ importers:
|
|
|
42
42
|
vue-remote:
|
|
43
43
|
dependencies:
|
|
44
44
|
'@fulgurjs/federation':
|
|
45
|
-
specifier: 6.1.
|
|
46
|
-
version: 6.1.
|
|
45
|
+
specifier: 6.1.2
|
|
46
|
+
version: 6.1.2(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(vite@6.4.3)(vue-router@4.6.4(vue@3.5.43(typescript@5.9.3)))(vue@3.5.43(typescript@5.9.3))
|
|
47
47
|
vue:
|
|
48
48
|
specifier: ^3.5.13
|
|
49
49
|
version: 3.5.43(typescript@5.9.3)
|
|
@@ -458,8 +458,8 @@ packages:
|
|
|
458
458
|
cpu: [x64]
|
|
459
459
|
os: [win32]
|
|
460
460
|
|
|
461
|
-
'@fulgurjs/federation@6.1.
|
|
462
|
-
resolution: {integrity: sha512-
|
|
461
|
+
'@fulgurjs/federation@6.1.2':
|
|
462
|
+
resolution: {integrity: sha512-XT1xHERqoKPAYypa23XhZFzCu3txQmuzl5/3Ev1b0SxHrHRaVvcon732dv5rUVS/8YFJav+GAMsjGHjk4DMjAQ==}
|
|
463
463
|
engines: {node: '>=18'}
|
|
464
464
|
hasBin: true
|
|
465
465
|
peerDependencies:
|
|
@@ -1196,7 +1196,7 @@ snapshots:
|
|
|
1196
1196
|
'@esbuild/win32-x64@0.27.7':
|
|
1197
1197
|
optional: true
|
|
1198
1198
|
|
|
1199
|
-
'@fulgurjs/federation@6.1.
|
|
1199
|
+
'@fulgurjs/federation@6.1.2(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(vite@6.4.3)(vue-router@4.6.4(vue@3.5.43(typescript@5.9.3)))(vue@3.5.43(typescript@5.9.3))':
|
|
1200
1200
|
dependencies:
|
|
1201
1201
|
es-module-lexer: 1.7.0
|
|
1202
1202
|
esbuild: 0.27.7
|
|
@@ -2,7 +2,7 @@ packages:
|
|
|
2
2
|
- react-host
|
|
3
3
|
- vue-remote
|
|
4
4
|
minimumReleaseAgeExclude:
|
|
5
|
-
- '@fulgurjs/federation@6.1.
|
|
5
|
+
- '@fulgurjs/federation@6.1.2'
|
|
6
6
|
# pnpm >=12 构建脚本批准(12 起弃用 onlyBuiltDependencies;pnpm 9-11 忽略本键:
|
|
7
7
|
# esbuild >=0.16 二进制经 optionalDependencies 平台包分发,postinstall 仅校验,不阻塞安装)
|
|
8
8
|
allowBuilds:
|
|
@@ -11,8 +11,8 @@ importers:
|
|
|
11
11
|
host:
|
|
12
12
|
dependencies:
|
|
13
13
|
'@fulgurjs/federation':
|
|
14
|
-
specifier: 6.1.
|
|
15
|
-
version: 6.1.
|
|
14
|
+
specifier: 6.1.2
|
|
15
|
+
version: 6.1.2(react-dom@19.3.0(react@19.3.0))(react-router-dom@7.18.4(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(react@19.3.0)(vite@6.4.3)
|
|
16
16
|
react:
|
|
17
17
|
specifier: ^19.1.0
|
|
18
18
|
version: 19.3.0
|
|
@@ -42,8 +42,8 @@ importers:
|
|
|
42
42
|
remote:
|
|
43
43
|
dependencies:
|
|
44
44
|
'@fulgurjs/federation':
|
|
45
|
-
specifier: 6.1.
|
|
46
|
-
version: 6.1.
|
|
45
|
+
specifier: 6.1.2
|
|
46
|
+
version: 6.1.2(react-dom@19.3.0(react@19.3.0))(react-router-dom@7.18.4(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(react@19.3.0)(vite@6.4.3)
|
|
47
47
|
react:
|
|
48
48
|
specifier: ^19.1.0
|
|
49
49
|
version: 19.3.0
|
|
@@ -464,8 +464,8 @@ packages:
|
|
|
464
464
|
cpu: [x64]
|
|
465
465
|
os: [win32]
|
|
466
466
|
|
|
467
|
-
'@fulgurjs/federation@6.1.
|
|
468
|
-
resolution: {integrity: sha512-
|
|
467
|
+
'@fulgurjs/federation@6.1.2':
|
|
468
|
+
resolution: {integrity: sha512-XT1xHERqoKPAYypa23XhZFzCu3txQmuzl5/3Ev1b0SxHrHRaVvcon732dv5rUVS/8YFJav+GAMsjGHjk4DMjAQ==}
|
|
469
469
|
engines: {node: '>=18'}
|
|
470
470
|
hasBin: true
|
|
471
471
|
peerDependencies:
|
|
@@ -1169,7 +1169,7 @@ snapshots:
|
|
|
1169
1169
|
'@esbuild/win32-x64@0.27.7':
|
|
1170
1170
|
optional: true
|
|
1171
1171
|
|
|
1172
|
-
'@fulgurjs/federation@6.1.
|
|
1172
|
+
'@fulgurjs/federation@6.1.2(react-dom@19.3.0(react@19.3.0))(react-router-dom@7.18.4(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(react@19.3.0)(vite@6.4.3)':
|
|
1173
1173
|
dependencies:
|
|
1174
1174
|
es-module-lexer: 1.7.0
|
|
1175
1175
|
esbuild: 0.27.7
|
|
@@ -2,7 +2,7 @@ packages:
|
|
|
2
2
|
- host
|
|
3
3
|
- remote
|
|
4
4
|
minimumReleaseAgeExclude:
|
|
5
|
-
- '@fulgurjs/federation@6.1.
|
|
5
|
+
- '@fulgurjs/federation@6.1.2'
|
|
6
6
|
# pnpm >=12 构建脚本批准(12 起弃用 onlyBuiltDependencies;pnpm 9-11 忽略本键:
|
|
7
7
|
# esbuild >=0.16 二进制经 optionalDependencies 平台包分发,postinstall 仅校验,不阻塞安装)
|
|
8
8
|
allowBuilds:
|