@seed-fe/mf-adapters 1.0.0-alpha.1 → 1.0.0-alpha.2

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/README.md CHANGED
@@ -43,8 +43,10 @@ pnpm add @seed-fe/mf-adapters
43
43
  ### 使用示例
44
44
 
45
45
  ```typescript
46
+ import type { MicroAppRuntimeProps } from '@seed-fe/mf-adapters';
47
+
46
48
  // 宿主框架传递给微应用
47
- renderApp({
49
+ mountApp({
48
50
  container: document,
49
51
  props: {
50
52
  app: {
@@ -56,7 +58,7 @@ renderApp({
56
58
  })
57
59
 
58
60
  // 微应用使用
59
- function App({ app }: RuntimeProps) {
61
+ function App({ app }: MicroAppRuntimeProps) {
60
62
  return (
61
63
  <BrowserRouter basename={app?.basename}>
62
64
  <Routes>
@@ -83,15 +85,15 @@ function App({ app }: RuntimeProps) {
83
85
 
84
86
  ```ts
85
87
  // src/mf-adapters/runtime.ts
86
- import { createMicroAppRuntime } from '@seed-fe/mf-adapters';
87
- import type { InitRuntimeFn, RenderAppFn, StartStandaloneFn } from '@seed-fe/mf-adapters';
88
+ import { createMicroFrontendAdapter } from '@seed-fe/mf-adapters';
89
+ import type { InitRuntimeFn, MountAppFn, StartStandaloneFn } from '@seed-fe/mf-adapters';
88
90
 
89
91
  // 使用类型别名,获得完整类型提示
90
92
  const initRuntime: InitRuntimeFn = async () => {
91
93
  // 初始化权限、认证、i18n 等
92
94
  };
93
95
 
94
- const renderApp: RenderAppFn = ({ container, props }) => {
96
+ const mountApp: MountAppFn = ({ container, props }) => {
95
97
  const root = createRoot(container as HTMLElement);
96
98
  root.render(<App {...props} />);
97
99
 
@@ -102,19 +104,19 @@ const renderApp: RenderAppFn = ({ container, props }) => {
102
104
  };
103
105
  };
104
106
 
105
- const startStandaloneApp: StartStandaloneFn = async (options) => {
107
+ const startStandalone: StartStandaloneFn = async (options) => {
106
108
  await initRuntime();
107
- return renderApp({
109
+ return mountApp({
108
110
  container: options?.container ?? document,
109
111
  props: options?.props,
110
112
  });
111
113
  };
112
114
 
113
115
  // 创建运行时适配实例:内部完成 Garfish / qiankun 等宿主的适配与宿主检测
114
- export const microAppRuntime = createMicroAppRuntime({
116
+ export const microAppRuntime = createMicroFrontendAdapter({
115
117
  initRuntime,
116
- mountApp: renderApp,
117
- startStandalone: startStandaloneApp,
118
+ mountApp,
119
+ startStandalone,
118
120
  });
119
121
  ```
120
122
 
@@ -156,8 +158,8 @@ export { bootstrap, mount, unmount } from '@/mf-adapters';
156
158
  // - 宿主通过 Garfish 标准机制挂载微应用
157
159
  ```
158
160
 
159
- - 适配层内部使用 `Map<Document, AppInstance>` 管理实例,支持同一应用在多个容器中挂载
160
- - 微应用只需要确保 `initRuntime` 幂等、`renderApp` 返回的实例提供 `unmount()` 即可
161
+ - 适配层内部使用 `Map<Document, MicroAppInstance>` 管理实例,支持同一应用在多个容器中挂载
162
+ - 微应用只需要确保 `initRuntime` 幂等、`mountApp` 返回的实例提供 `unmount()` 即可
161
163
 
162
164
  ---
163
165
 
@@ -172,4 +174,4 @@ export const { bootstrap, mount, unmount } = microAppRuntime.qiankun ?? {};
172
174
  ```
173
175
 
174
176
  - 微应用侧暴露标准的 qiankun 生命周期
175
- - 每个 `container` 对应一个 `AppInstance`,适配层内部同样用 Map 管理实例,方便宿主做多实例或保活
177
+ - 每个 `container` 对应一个 `MicroAppInstance`,适配层内部同样用 Map 管理实例,方便宿主做多实例或保活
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var c=require('@seed-fe/logger');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var c__default=/*#__PURE__*/_interopDefault(c);var R=false;async function _(p){if(R)return;let{hosts:o,fallback:i}=p;for(let n of o)if(n.detect()){c__default.default.info(`[mf-runtime] detected micro-frontend host: ${n.name}`);try{await n.activate?.(),R=!0,c__default.default.info(`[mf-runtime] activated micro-frontend host: ${n.name}`);return}catch(s){c__default.default.error(`[mf-runtime] failed to activate ${n.name}, trying fallback`,s);}}R||(c__default.default.info("[mf-runtime] fallback to standalone mode"),await i());}function h(p){let{initRuntime:o,renderApp:i}=p,n=new Map;function s(){return {render(t){return o().then(()=>{let r=i({container:t.dom,props:{...t.props,app:t.props?.app}});n.set(t.dom,r),c__default.default.info(`[mf-runtime][garfish] rendered successfully: ${t.appName}`);}).catch(r=>{throw c__default.default.error(`[mf-runtime][garfish] render failed: ${t.appName}`,r),n.delete(t.dom),r})},destroy(t){try{let r=n.get(t.dom);r&&r.unmount(),n.delete(t.dom),c__default.default.info("[mf-runtime][garfish] destroy completed");}catch(r){c__default.default.error("[mf-runtime][garfish] destroy failed",r);}}}}return {provider:s}}function y(p){let{initRuntime:o,renderApp:i}=p,n=new Map;async function s(){try{await o(),c__default.default.info("[mf-runtime][qiankun] bootstrap completed");}catch(a){throw c__default.default.error("[mf-runtime][qiankun] bootstrap failed",a),a}}function t(a){try{let e=a.container??document,u=i({container:e,props:{...a,app:a.app}});n.set(e,u),c__default.default.info("[mf-runtime][qiankun] mount completed");}catch(e){throw c__default.default.error("[mf-runtime][qiankun] mount failed",e),e}}function r(a){try{let e=a?.container??document;n.get(e)?.unmount(),n.delete(e),c__default.default.info("[mf-runtime][qiankun] unmount completed");}catch(e){throw c__default.default.error("[mf-runtime][qiankun] unmount failed",e),e}}return {bootstrap:s,mount:t,unmount:r}}function M(p){let{initRuntime:o,mountApp:i,startStandalone:n,hosts:s,extraHosts:t}=p,r=s?.garfish??true,a=s?.qiankun??true,e=[];if(r){let{provider:d}=h({initRuntime:o,renderApp:m=>i({container:m.container,props:m.props})});if(typeof window<"u"&&window.__GARFISH__){let m=globalThis;m.__GARFISH_EXPORTS__||(m.__GARFISH_EXPORTS__={}),m.__GARFISH_EXPORTS__.provider=d;}e.push({name:"garfish",detect:()=>!!window.__GARFISH__,activate:()=>{typeof __GARFISH_EXPORTS__<"u"&&(__GARFISH_EXPORTS__.provider=d);}});}let u;if(a){let{bootstrap:d,mount:m,unmount:g}=y({initRuntime:o,renderApp:i});u={bootstrap:d,mount:m,unmount:g},e.push({name:"qiankun",detect:()=>!!window.__POWERED_BY_QIANKUN__,activate:()=>{c__default.default.info("[mf-adapter] qiankun");}});}return t?.length&&e.push(...t),_({hosts:e,fallback:()=>n()}),{startStandaloneApp:n,qiankun:u}}function T(p){let{initRuntime:o,renderApp:i}=p,n=null;return async function(t){return n||(await o(),n=i({container:t?.container??document,props:t?.props}),n)}}exports.createGarfishAdapter=h;exports.createMicroAppRuntime=M;exports.createQiankunAdapter=y;exports.createStandaloneStarter=T;exports.initMicroFrontendHosts=_;//# sourceMappingURL=index.cjs.map
1
+ 'use strict';var u=require('@seed-fe/logger');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var u__default=/*#__PURE__*/_interopDefault(u);var M="@seed-fe/mf-adapters";function o(i){return i?`[${M}][${i}]`:`[${M}]`}var h=false;async function R(i){if(h)return;let{hosts:a,fallback:p}=i;for(let t of a)if(t.detect()){u__default.default.info(`${o("host-manager")} detected host: ${t.name}`);try{await t.activate?.(),h=!0,u__default.default.info(`${o("host-manager")} activated host: ${t.name}`);return}catch(s){u__default.default.error(`${o("host-manager")} failed to activate ${t.name}, trying fallback`,s);}}h||(u__default.default.info(`${o("host-manager")} fallback to standalone mode`),await p(),h=true);}function y(i){let{initRuntime:a,mountApp:p}=i,t=new Map;function s(){return {render(n){return a().then(()=>{let e=p({container:n.dom,props:n.props});t.set(n.dom,e),u__default.default.info(`${o("garfish")} rendered successfully: ${n.appName}`);}).catch(e=>{throw u__default.default.error(`${o("garfish")} render failed: ${n.appName}`,e),t.delete(n.dom),e})},destroy(n){try{let e=t.get(n.dom);e&&e.unmount(),t.delete(n.dom),u__default.default.info(`${o("garfish")} destroy completed`);}catch(e){u__default.default.error(`${o("garfish")} destroy failed`,e);}}}}return {provider:s}}function P(i){let{initRuntime:a,mountApp:p}=i,t=new Map;async function s(){try{await a(),u__default.default.info(`${o("qiankun")} bootstrap completed`);}catch(c){throw u__default.default.error(`${o("qiankun")} bootstrap failed`,c),c}}function n(c){try{let r=c.container??document,d=p({container:r,props:c});t.set(r,d),u__default.default.info(`${o("qiankun")} mount completed`);}catch(r){throw u__default.default.error(`${o("qiankun")} mount failed`,r),r}}function e(c){try{let r=c?.container??document;t.get(r)?.unmount(),t.delete(r),u__default.default.info(`${o("qiankun")} unmount completed`);}catch(r){throw u__default.default.error(`${o("qiankun")} unmount failed`,r),r}}return {bootstrap:s,mount:n,unmount:e}}function T(i){let{initRuntime:a,mountApp:p,startStandalone:t,hosts:s,extraHosts:n}=i,e=s?.garfish??true,c=s?.qiankun??true,r=[];if(e){let{provider:l}=y({initRuntime:a,mountApp:f=>p({container:f.container,props:f.props})});if(window.__GARFISH__){let f=globalThis;f.__GARFISH_EXPORTS__||(f.__GARFISH_EXPORTS__={}),f.__GARFISH_EXPORTS__.provider=l;}r.push({name:"garfish",detect:()=>!!window.__GARFISH__,activate:()=>{typeof __GARFISH_EXPORTS__<"u"&&(__GARFISH_EXPORTS__.provider=l);}});}let d;if(c){let{bootstrap:l,mount:f,unmount:g}=P({initRuntime:a,mountApp:p});d={bootstrap:l,mount:f,unmount:g},r.push({name:"qiankun",detect:()=>!!window.__POWERED_BY_QIANKUN__});}return n?.length&&r.push(...n),R({hosts:r,fallback:()=>t()}),{startStandalone:t,qiankun:d}}function L(i){let{initRuntime:a,mountApp:p}=i,t=null;return async function(n){return t||(await a(),t=p({container:n?.container??document,props:n?.props}),t)}}exports.createGarfishAdapter=y;exports.createMicroFrontendAdapter=T;exports.createQiankunAdapter=P;exports.createStandaloneStarter=L;exports.initMicroFrontendHosts=R;//# sourceMappingURL=index.cjs.map
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/hostManager.ts","../src/hosts/garfish.ts","../src/hosts/qiankun.ts","../src/core/setup.ts","../src/core/standalone.ts"],"names":["microFrontendResolved","initMicroFrontendHosts","options","hosts","fallback","host","logger","error","createGarfishAdapter","initRuntime","renderApp","instances","provider","params","instance","createQiankunAdapter","bootstrap","mount","props","container","unmount","createMicroAppRuntime","mountApp","startStandalone","extraHosts","garfishEnabled","qiankunEnabled","hostAdapters","garfishOptions","globalWithExports","qiankunRuntime","createStandaloneStarter","standaloneInstance","customOptions"],"mappings":"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","file":"index.cjs","sourcesContent":["import logger from '@seed-fe/logger';\nimport type { AppInstance } from '../types/base';\n\nexport interface HostAdapterConfig {\n name: string;\n /**\n * 返回 true 表示当前宿主命中\n */\n detect(): boolean;\n /**\n * 命中宿主后调用,用于注册生命周期或执行初始化逻辑\n */\n activate?(): void | Promise<void>;\n}\n\nexport interface HostManagerOptions {\n hosts: HostAdapterConfig[];\n /**\n * 当未检测到任何宿主标识时的回退逻辑,一般为 startStandaloneApp\n */\n fallback: () => Promise<AppInstance> | Promise<unknown>;\n}\n\nlet microFrontendResolved = false;\n\n/**\n * 根据宿主环境动态选择微前端框架,若未检测到宿主则回退为独立运行模式。\n */\nexport async function initMicroFrontendHosts(options: HostManagerOptions): Promise<void> {\n if (microFrontendResolved) {\n return;\n }\n\n const { hosts, fallback } = options;\n\n for (const host of hosts) {\n if (host.detect()) {\n logger.info(`[mf-runtime] detected micro-frontend host: ${host.name}`);\n\n try {\n await host.activate?.();\n microFrontendResolved = true;\n logger.info(`[mf-runtime] activated micro-frontend host: ${host.name}`);\n return;\n } catch (error) {\n logger.error(`[mf-runtime] failed to activate ${host.name}, trying fallback`, error);\n // 继续尝试下一个宿主或回退到独立模式\n }\n }\n }\n\n // 如果所有宿主激活失败或未检测到任何宿主,调用 fallback\n if (!microFrontendResolved) {\n logger.info('[mf-runtime] fallback to standalone mode');\n await fallback();\n }\n}\n","import logger from '@seed-fe/logger';\nimport type { AdapterOptions, AppInstance } from '../types/base';\nimport type { GarfishDestroyParams, GarfishRenderParams } from '../types/garfish';\n\n/**\n * 创建 Garfish 适配器:\n * - 提供 provider() 给 Garfish 宿主使用\n * - 内部通过 Map<Document, AppInstance> 管理实例,支持多容器挂载\n * - 不关心具体渲染实现细节(React/Vue/纯 DOM 等)\n */\nexport function createGarfishAdapter(options: AdapterOptions) {\n const { initRuntime, renderApp } = options;\n\n const instances = new Map<Document, AppInstance>();\n\n function provider() {\n return {\n render(params: GarfishRenderParams) {\n return initRuntime()\n .then(() => {\n const instance = renderApp({\n container: params.dom,\n props: {\n ...params.props,\n app: params.props?.app,\n },\n });\n instances.set(params.dom, instance);\n logger.info(`[mf-runtime][garfish] rendered successfully: ${params.appName}`);\n })\n .catch((error: Error) => {\n logger.error(`[mf-runtime][garfish] render failed: ${params.appName}`, error);\n // 清理可能的部分状态\n instances.delete(params.dom);\n // 重新抛出,让 Garfish 处理\n throw error;\n });\n },\n destroy(params: GarfishDestroyParams) {\n try {\n const instance = instances.get(params.dom);\n if (instance) {\n instance.unmount();\n }\n instances.delete(params.dom);\n logger.info('[mf-runtime][garfish] destroy completed');\n } catch (error) {\n // 仅记录错误,允许 Garfish 继续清理其他资源\n logger.error('[mf-runtime][garfish] destroy failed', error);\n }\n },\n };\n }\n\n return { provider };\n}\n","import logger from '@seed-fe/logger';\nimport type { AdapterOptions, AppInstance } from '../types/base';\nimport type { QiankunProps } from '../types/qiankun';\n\n/** @deprecated 使用 AdapterOptions 替代 */\nexport type QiankunAdapterOptions = AdapterOptions;\n\n/**\n * 创建 qiankun 适配器:\n * - 提供 bootstrap/mount/unmount 标准生命周期\n * - 内部通过 Map<container, AppInstance> 管理实例,支持多实例挂载\n * - 不关心具体渲染实现细节(React/Vue/纯 DOM 等)\n */\nexport function createQiankunAdapter(options: AdapterOptions) {\n const { initRuntime, renderApp } = options;\n\n const instances = new Map<Element | Document, AppInstance>();\n\n async function bootstrap() {\n try {\n await initRuntime();\n logger.info('[mf-runtime][qiankun] bootstrap completed');\n } catch (error) {\n logger.error('[mf-runtime][qiankun] bootstrap failed', error);\n throw error;\n }\n }\n\n function mount(props: QiankunProps) {\n try {\n const container = props.container ?? document;\n const instance = renderApp({\n container,\n props: {\n ...props,\n app: props.app,\n },\n });\n instances.set(container, instance);\n logger.info('[mf-runtime][qiankun] mount completed');\n } catch (error) {\n logger.error('[mf-runtime][qiankun] mount failed', error);\n throw error;\n }\n }\n\n function unmount(props?: QiankunProps) {\n try {\n const container = props?.container ?? document;\n const instance = instances.get(container);\n instance?.unmount();\n instances.delete(container);\n logger.info('[mf-runtime][qiankun] unmount completed');\n } catch (error) {\n logger.error('[mf-runtime][qiankun] unmount failed', error);\n throw error;\n }\n }\n\n return { bootstrap, mount, unmount };\n}\n","import logger from '@seed-fe/logger';\nimport { createGarfishAdapter } from '../hosts/garfish';\nimport { createQiankunAdapter } from '../hosts/qiankun';\nimport type { AppInstance, InitRuntimeFn, RenderAppFn, StartStandaloneFn } from '../types/base';\nimport type { GarfishExports } from '../types/garfish';\nimport type { QiankunProps } from '../types/qiankun';\nimport type { HostAdapterConfig } from './hostManager';\nimport { initMicroFrontendHosts } from './hostManager';\nimport type { StandaloneOptions } from './standalone';\n\nexport interface MicroAppRuntimeOptions {\n /**\n * 微应用运行时初始化逻辑,由应用侧实现。\n * 典型职责:权限、认证、i18n 等一次性初始化。\n */\n initRuntime: InitRuntimeFn;\n /**\n * 微应用渲染逻辑,由应用侧实现。\n * - 适配层只关心 container / props 约定\n * - 内部可以是 React / Vue / 纯 DOM 等任意实现\n */\n mountApp: RenderAppFn;\n /**\n * 独立运行模式入口,由应用侧实现。\n * - 一般通过 createStandaloneStarter(initRuntime, renderApp) 生成\n * - 适配层只在未检测到任何宿主时调用\n */\n startStandalone: StartStandaloneFn;\n /**\n * 内置宿主框架配置\n *\n * - 默认全部启用(garfish: true, qiankun: true)\n * - 设置为 false 可禁用特定框架\n * - 设置为 {} 等同于全部启用\n *\n * @example\n * ```ts\n * // 默认全部启用\n * createMicroAppRuntime({ initRuntime, mountApp, startStandalone });\n *\n * // 仅启用 garfish\n * createMicroAppRuntime({\n * initRuntime,\n * mountApp,\n * startStandalone,\n * hosts: { garfish: true, qiankun: false },\n * });\n *\n * // 禁用所有内置框架,仅使用 extraHosts\n * createMicroAppRuntime({\n * initRuntime,\n * mountApp,\n * startStandalone,\n * hosts: { garfish: false, qiankun: false },\n * extraHosts: [customHost],\n * });\n * ```\n */\n hosts?: {\n garfish?: boolean;\n qiankun?: boolean;\n };\n /**\n * 额外宿主配置,用于接入其他微前端库\n * - 适合其他团队维护的宿主,仅需在微应用中传入配置即可\n */\n extraHosts?: HostAdapterConfig[];\n}\n\nexport interface MicroAppRuntime {\n /**\n * 独立运行模式入口(直接透传应用侧实现)\n */\n startStandaloneApp: (options?: StandaloneOptions) => Promise<AppInstance>;\n /**\n * qiankun 生命周期适配结果\n * - 需要在微应用中按需导出:export const { bootstrap, mount, unmount } = runtime.qiankun ?? {};\n */\n qiankun?: {\n bootstrap: () => Promise<void>;\n mount: (props: QiankunProps) => void;\n unmount: (props?: QiankunProps) => void;\n };\n}\n\n/**\n * 创建微应用运行时适配:\n * - 接收应用侧的 initRuntime / mountApp / startStandalone\n * - 内部完成 Garfish / qiankun 等宿主的适配与检测\n * - 返回 qiankun 生命周期供微应用按需导出\n *\n * 微应用层只需要:\n * 1. 提供 initRuntime / mountApp / startStandalone\n * 2. 在入口处调用 createMicroAppRuntime(...)\n * 3. 若需要支持 qiankun,再将 runtime.qiankun 的三个生命周期导出\n */\nexport function createMicroAppRuntime(options: MicroAppRuntimeOptions): MicroAppRuntime {\n const { initRuntime, mountApp, startStandalone, hosts, extraHosts } = options;\n\n // 默认全部启用\n const garfishEnabled = hosts?.garfish ?? true;\n const qiankunEnabled = hosts?.qiankun ?? true;\n\n const hostAdapters: HostAdapterConfig[] = [];\n\n // Garfish:通过 __GARFISH__ / __GARFISH_EXPORTS__ 适配 provider\n if (garfishEnabled) {\n const { provider } = createGarfishAdapter({\n initRuntime,\n renderApp: (garfishOptions) =>\n mountApp({\n container: garfishOptions.container,\n props: garfishOptions.props,\n }),\n });\n\n // 宿主模式下:若检测到 Garfish 标识,则立即挂载 provider。\n // 兼容两种注入方式:\n // - 宿主预先创建 __GARFISH_EXPORTS__\n // - 子应用自行创建 __GARFISH_EXPORTS__\n if (typeof window !== 'undefined' && (window as Window & { __GARFISH__?: boolean }).__GARFISH__) {\n const globalWithExports = globalThis as typeof globalThis & { __GARFISH_EXPORTS__?: GarfishExports };\n if (!globalWithExports.__GARFISH_EXPORTS__) {\n globalWithExports.__GARFISH_EXPORTS__ = {} as GarfishExports;\n }\n globalWithExports.__GARFISH_EXPORTS__.provider = provider;\n }\n\n hostAdapters.push({\n name: 'garfish',\n detect: () => Boolean(window.__GARFISH__),\n activate: () => {\n if (typeof __GARFISH_EXPORTS__ !== 'undefined') {\n __GARFISH_EXPORTS__.provider = provider;\n }\n },\n });\n }\n\n // qiankun:返回标准生命周期,由微应用按需导出\n let qiankunRuntime: MicroAppRuntime['qiankun'];\n\n if (qiankunEnabled) {\n const { bootstrap, mount, unmount } = createQiankunAdapter({\n initRuntime,\n renderApp: mountApp,\n });\n\n qiankunRuntime = {\n bootstrap,\n mount,\n unmount,\n };\n\n // 将 qiankun 添加到 hosts 数组用于检测\n // 虽然 qiankun 不需要 activate(宿主会主动调用生命周期),\n // 但仍需要 detect 以防止错误地进入独立运行模式\n hostAdapters.push({\n name: 'qiankun',\n detect: () => Boolean(window.__POWERED_BY_QIANKUN__),\n activate: () => {\n logger.info(`[mf-adapter] qiankun`);\n // qiankun 宿主会主动调用生命周期,无需额外激活\n },\n });\n }\n\n if (extraHosts?.length) {\n hostAdapters.push(...extraHosts);\n }\n\n // 初始化宿主检测 + 独立运行回退\n void initMicroFrontendHosts({\n hosts: hostAdapters,\n fallback: () => startStandalone(),\n });\n\n return {\n startStandaloneApp: startStandalone,\n qiankun: qiankunRuntime,\n };\n}\n","import type { AppInstance, InitRuntimeFn, RenderAppFn, RuntimeProps } from '../types/base';\n\nexport interface StandaloneOptions {\n container?: Document;\n props?: RuntimeProps;\n}\n\nexport interface StandaloneStarterOptions {\n initRuntime: InitRuntimeFn;\n renderApp: RenderAppFn;\n}\n\n/**\n * 创建独立运行模式启动器:\n * - 统一处理非微前端宿主环境下的初始化逻辑\n * - 内部保证单例实例,避免重复挂载\n */\nexport function createStandaloneStarter(options: StandaloneStarterOptions) {\n const { initRuntime, renderApp } = options;\n\n let standaloneInstance: AppInstance | null = null;\n\n return async function startStandaloneApp(customOptions?: StandaloneOptions): Promise<AppInstance> {\n if (standaloneInstance) {\n return standaloneInstance;\n }\n\n await initRuntime();\n\n standaloneInstance = renderApp({\n container: customOptions?.container ?? document,\n props: customOptions?.props,\n });\n\n return standaloneInstance;\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/core/log.ts","../src/core/hostManager.ts","../src/hosts/garfish.ts","../src/hosts/qiankun.ts","../src/core/setup.ts","../src/core/standalone.ts"],"names":["LOG_NAMESPACE","formatLogPrefix","scope","hasActivatedHost","initMicroFrontendHosts","options","hosts","fallback","host","logger","error","createGarfishAdapter","initRuntime","mountApp","instancesByDocument","provider","params","instance","createQiankunAdapter","instancesByContainer","bootstrap","mount","props","container","unmount","createMicroFrontendAdapter","startStandalone","extraHosts","garfishEnabled","qiankunEnabled","hostAdapters","garfishOptions","globalWithExports","qiankunLifecycles","createStandaloneStarter","standaloneInstance","customOptions"],"mappings":"8JAAO,IAAMA,CAAAA,CAAgB,uBAEtB,SAASC,CAAAA,CAAgBC,CAAAA,CAAwB,CACtD,OAAOA,CAAAA,CAAQ,CAAA,CAAA,EAAIF,CAAa,KAAKE,CAAK,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,EAAIF,CAAa,CAAA,CAAA,CACnE,CCoBA,IAAIG,CAAAA,CAAmB,MAKvB,eAAsBC,CAAAA,CAAuBC,CAAAA,CAAuD,CAClG,GAAIF,CAAAA,CACF,OAGF,GAAM,CAAE,MAAAG,CAAAA,CAAO,QAAA,CAAAC,CAAS,CAAA,CAAIF,CAAAA,CAE5B,IAAA,IAAWG,CAAAA,IAAQF,CAAAA,CACjB,GAAIE,CAAAA,CAAK,MAAA,EAAO,CAAG,CACjBC,mBAAO,IAAA,CAAK,CAAA,EAAGR,CAAAA,CAAgB,cAAc,CAAC,CAAA,gBAAA,EAAmBO,CAAAA,CAAK,IAAI,CAAA,CAAE,CAAA,CAE5E,GAAI,CACF,MAAMA,EAAK,QAAA,IAAW,CACtBL,CAAAA,CAAmB,CAAA,CAAA,CACnBM,mBAAO,IAAA,CAAK,CAAA,EAAGR,CAAAA,CAAgB,cAAc,CAAC,CAAA,iBAAA,EAAoBO,CAAAA,CAAK,IAAI,CAAA,CAAE,CAAA,CAC7E,MACF,CAAA,MAASE,CAAAA,CAAO,CACdD,kBAAAA,CAAO,KAAA,CAAM,CAAA,EAAGR,CAAAA,CAAgB,cAAc,CAAC,CAAA,oBAAA,EAAuBO,CAAAA,CAAK,IAAI,oBAAqBE,CAAK,EAE3G,CACF,CAIGP,CAAAA,GACHM,kBAAAA,CAAO,IAAA,CAAK,CAAA,EAAGR,EAAgB,cAAc,CAAC,CAAA,4BAAA,CAA8B,CAAA,CAC5E,MAAMM,CAAAA,EAAS,CACfJ,CAAAA,CAAmB,IAAA,EAEvB,CC/CO,SAASQ,CAAAA,CAAqBN,CAAAA,CAAwB,CAC3D,GAAM,CAAE,WAAA,CAAAO,CAAAA,CAAa,QAAA,CAAAC,CAAS,EAAIR,CAAAA,CAE5BS,CAAAA,CAAsB,IAAI,GAAA,CAEhC,SAASC,CAAAA,EAAW,CAClB,OAAO,CACL,MAAA,CAAOC,CAAAA,CAA6B,CAClC,OAAOJ,GAAY,CAChB,IAAA,CAAK,IAAM,CACV,IAAMK,CAAAA,CAAWJ,CAAAA,CAAS,CACxB,SAAA,CAAWG,EAAO,GAAA,CAClB,KAAA,CAAOA,CAAAA,CAAO,KAChB,CAAC,CAAA,CACDF,CAAAA,CAAoB,GAAA,CAAIE,EAAO,GAAA,CAAKC,CAAQ,CAAA,CAC5CR,kBAAAA,CAAO,KAAK,CAAA,EAAGR,CAAAA,CAAgB,SAAS,CAAC,2BAA2Be,CAAAA,CAAO,OAAO,CAAA,CAAE,EACtF,CAAC,CAAA,CACA,KAAA,CAAON,CAAAA,EAAiB,CACvB,MAAAD,kBAAAA,CAAO,KAAA,CAAM,CAAA,EAAGR,EAAgB,SAAS,CAAC,CAAA,gBAAA,EAAmBe,CAAAA,CAAO,OAAO,CAAA,CAAA,CAAIN,CAAK,CAAA,CAEpFI,CAAAA,CAAoB,MAAA,CAAOE,CAAAA,CAAO,GAAG,CAAA,CAE/BN,CACR,CAAC,CACL,CAAA,CACA,OAAA,CAAQM,EAA8B,CACpC,GAAI,CACF,IAAMC,EAAWH,CAAAA,CAAoB,GAAA,CAAIE,CAAAA,CAAO,GAAG,CAAA,CAC/CC,CAAAA,EACFA,CAAAA,CAAS,OAAA,GAEXH,CAAAA,CAAoB,MAAA,CAAOE,CAAAA,CAAO,GAAG,EACrCP,kBAAAA,CAAO,IAAA,CAAK,CAAA,EAAGR,CAAAA,CAAgB,SAAS,CAAC,CAAA,kBAAA,CAAoB,EAC/D,CAAA,MAASS,CAAAA,CAAO,CAEdD,kBAAAA,CAAO,KAAA,CAAM,GAAGR,CAAAA,CAAgB,SAAS,CAAC,CAAA,eAAA,CAAA,CAAmBS,CAAK,EACpE,CACF,CACF,CACF,CAEA,OAAO,CAAE,QAAA,CAAAK,CAAS,CACpB,CC1CO,SAASG,CAAAA,CAAqBb,CAAAA,CAAwB,CAC3D,GAAM,CAAE,WAAA,CAAAO,CAAAA,CAAa,QAAA,CAAAC,CAAS,CAAA,CAAIR,CAAAA,CAE5Bc,CAAAA,CAAuB,IAAI,GAAA,CAEjC,eAAeC,CAAAA,EAAY,CACzB,GAAI,CACF,MAAMR,CAAAA,EAAY,CAClBH,mBAAO,IAAA,CAAK,CAAA,EAAGR,CAAAA,CAAgB,SAAS,CAAC,CAAA,oBAAA,CAAsB,EACjE,CAAA,MAASS,CAAAA,CAAO,CACd,MAAAD,kBAAAA,CAAO,KAAA,CAAM,GAAGR,CAAAA,CAAgB,SAAS,CAAC,CAAA,iBAAA,CAAA,CAAqBS,CAAK,CAAA,CAC9DA,CACR,CACF,CAEA,SAASW,CAAAA,CAAMC,CAAAA,CAAqB,CAClC,GAAI,CACF,IAAMC,CAAAA,CAAYD,CAAAA,CAAM,WAAa,QAAA,CAC/BL,CAAAA,CAAWJ,CAAAA,CAAS,CACxB,UAAAU,CAAAA,CACA,KAAA,CAAAD,CACF,CAAC,EACDH,CAAAA,CAAqB,GAAA,CAAII,CAAAA,CAAWN,CAAQ,CAAA,CAC5CR,kBAAAA,CAAO,IAAA,CAAK,CAAA,EAAGR,EAAgB,SAAS,CAAC,CAAA,gBAAA,CAAkB,EAC7D,OAASS,CAAAA,CAAO,CACd,MAAAD,kBAAAA,CAAO,MAAM,CAAA,EAAGR,CAAAA,CAAgB,SAAS,CAAC,CAAA,aAAA,CAAA,CAAiBS,CAAK,CAAA,CAC1DA,CACR,CACF,CAEA,SAASc,CAAAA,CAAQF,CAAAA,CAAsB,CACrC,GAAI,CACF,IAAMC,CAAAA,CAAYD,GAAO,SAAA,EAAa,QAAA,CACrBH,CAAAA,CAAqB,GAAA,CAAII,CAAS,CAAA,EACzC,OAAA,EAAQ,CAClBJ,EAAqB,MAAA,CAAOI,CAAS,CAAA,CACrCd,kBAAAA,CAAO,KAAK,CAAA,EAAGR,CAAAA,CAAgB,SAAS,CAAC,oBAAoB,EAC/D,CAAA,MAASS,CAAAA,CAAO,CACd,MAAAD,kBAAAA,CAAO,KAAA,CAAM,CAAA,EAAGR,EAAgB,SAAS,CAAC,CAAA,eAAA,CAAA,CAAmBS,CAAK,EAC5DA,CACR,CACF,CAEA,OAAO,CAAE,SAAA,CAAAU,CAAAA,CAAW,KAAA,CAAAC,CAAAA,CAAO,OAAA,CAAAG,CAAQ,CACrC,CCwCO,SAASC,CAAAA,CAA2BpB,CAAAA,CAA4D,CACrG,GAAM,CAAE,WAAA,CAAAO,CAAAA,CAAa,QAAA,CAAAC,CAAAA,CAAU,gBAAAa,CAAAA,CAAiB,KAAA,CAAApB,CAAAA,CAAO,UAAA,CAAAqB,CAAW,CAAA,CAAItB,CAAAA,CAGhEuB,CAAAA,CAAiBtB,GAAO,OAAA,EAAW,IAAA,CACnCuB,CAAAA,CAAiBvB,CAAAA,EAAO,SAAW,IAAA,CAEnCwB,CAAAA,CAA2C,EAAC,CAGlD,GAAIF,CAAAA,CAAgB,CAClB,GAAM,CAAE,QAAA,CAAAb,CAAS,CAAA,CAAIJ,CAAAA,CAAqB,CACxC,WAAA,CAAAC,CAAAA,CACA,QAAA,CAAWmB,CAAAA,EACTlB,EAAS,CACP,SAAA,CAAWkB,CAAAA,CAAe,SAAA,CAC1B,MAAOA,CAAAA,CAAe,KACxB,CAAC,CACL,CAAC,CAAA,CAMD,GAAI,MAAA,CAAO,YAAa,CACtB,IAAMC,CAAAA,CAAoB,UAAA,CACrBA,EAAkB,mBAAA,GACrBA,CAAAA,CAAkB,mBAAA,CAAsB,IAE1CA,CAAAA,CAAkB,mBAAA,CAAoB,QAAA,CAAWjB,EACnD,CAEAe,CAAAA,CAAa,IAAA,CAAK,CAChB,KAAM,SAAA,CACN,MAAA,CAAQ,IAAM,CAAA,CAAQ,OAAO,WAAA,CAC7B,QAAA,CAAU,IAAM,CACV,OAAO,mBAAA,CAAwB,GAAA,GACjC,mBAAA,CAAoB,QAAA,CAAWf,CAAAA,EAEnC,CACF,CAAC,EACH,CAGA,IAAIkB,CAAAA,CAEJ,GAAIJ,CAAAA,CAAgB,CAClB,GAAM,CAAE,SAAA,CAAAT,CAAAA,CAAW,MAAAC,CAAAA,CAAO,OAAA,CAAAG,CAAQ,CAAA,CAAIN,CAAAA,CAAqB,CACzD,WAAA,CAAAN,CAAAA,CACA,SAAAC,CACF,CAAC,CAAA,CAEDoB,CAAAA,CAAoB,CAClB,SAAA,CAAAb,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,QAAAG,CACF,CAAA,CAKAM,CAAAA,CAAa,IAAA,CAAK,CAChB,IAAA,CAAM,SAAA,CACN,MAAA,CAAQ,IAAM,CAAA,CAAQ,MAAA,CAAO,sBAC/B,CAAC,EACH,CAEA,OAAIH,CAAAA,EAAY,MAAA,EACdG,EAAa,IAAA,CAAK,GAAGH,CAAU,CAAA,CAI5BvB,CAAAA,CAAuB,CAC1B,KAAA,CAAO0B,CAAAA,CACP,SAAU,IAAMJ,CAAAA,EAClB,CAAC,EAEM,CACL,eAAA,CAAAA,CAAAA,CACA,OAAA,CAASO,CACX,CACF,CC/JO,SAASC,CAAAA,CAAwB7B,CAAAA,CAAmC,CACzE,GAAM,CAAE,YAAAO,CAAAA,CAAa,QAAA,CAAAC,CAAS,CAAA,CAAIR,EAE9B8B,CAAAA,CAA8C,IAAA,CAElD,OAAO,eAA+BC,EAA8D,CAClG,OAAID,CAAAA,GAIJ,MAAMvB,CAAAA,EAAY,CAElBuB,CAAAA,CAAqBtB,CAAAA,CAAS,CAC5B,SAAA,CAAWuB,CAAAA,EAAe,SAAA,EAAa,QAAA,CACvC,MAAOA,CAAAA,EAAe,KACxB,CAAC,CAAA,CAEMD,EACT,CACF","file":"index.cjs","sourcesContent":["export const LOG_NAMESPACE = '@seed-fe/mf-adapters';\n\nexport function formatLogPrefix(scope?: string): string {\n return scope ? `[${LOG_NAMESPACE}][${scope}]` : `[${LOG_NAMESPACE}]`;\n}\n\n","import logger from '@seed-fe/logger';\nimport type { MicroAppInstance } from '../types/base';\nimport { formatLogPrefix } from './log';\n\nexport interface MicroFrontendHostAdapter {\n name: string;\n /**\n * 返回 true 表示当前宿主命中\n */\n detect(): boolean;\n /**\n * 命中宿主后调用,用于注册生命周期或执行初始化逻辑\n */\n activate?(): void | Promise<void>;\n}\n\nexport interface InitMicroFrontendHostsOptions {\n hosts: MicroFrontendHostAdapter[];\n /**\n * 当未检测到任何宿主标识时的回退逻辑,一般为 startStandalone\n */\n fallback: () => Promise<MicroAppInstance> | Promise<unknown>;\n}\n\nlet hasActivatedHost = false;\n\n/**\n * 根据宿主环境动态选择微前端框架,若未检测到宿主则回退为独立运行模式。\n */\nexport async function initMicroFrontendHosts(options: InitMicroFrontendHostsOptions): Promise<void> {\n if (hasActivatedHost) {\n return;\n }\n\n const { hosts, fallback } = options;\n\n for (const host of hosts) {\n if (host.detect()) {\n logger.info(`${formatLogPrefix('host-manager')} detected host: ${host.name}`);\n\n try {\n await host.activate?.();\n hasActivatedHost = true;\n logger.info(`${formatLogPrefix('host-manager')} activated host: ${host.name}`);\n return;\n } catch (error) {\n logger.error(`${formatLogPrefix('host-manager')} failed to activate ${host.name}, trying fallback`, error);\n // 继续尝试下一个宿主或回退到独立模式\n }\n }\n }\n\n // 如果所有宿主激活失败或未检测到任何宿主,调用 fallback\n if (!hasActivatedHost) {\n logger.info(`${formatLogPrefix('host-manager')} fallback to standalone mode`);\n await fallback();\n hasActivatedHost = true;\n }\n}\n","import logger from '@seed-fe/logger';\nimport type { MicroAppHooks, MicroAppInstance } from '../types/base';\nimport type { GarfishDestroyParams, GarfishRenderParams } from '../types/garfish';\nimport { formatLogPrefix } from '../core/log';\n\n/**\n * 创建 Garfish 适配器:\n * - 提供 provider() 给 Garfish 宿主使用\n * - 内部通过 Map<Document, MicroAppInstance> 管理实例,支持多容器挂载\n * - 不关心具体渲染实现细节(React/Vue/纯 DOM 等)\n */\nexport function createGarfishAdapter(options: MicroAppHooks) {\n const { initRuntime, mountApp } = options;\n\n const instancesByDocument = new Map<Document, MicroAppInstance>();\n\n function provider() {\n return {\n render(params: GarfishRenderParams) {\n return initRuntime()\n .then(() => {\n const instance = mountApp({\n container: params.dom,\n props: params.props,\n });\n instancesByDocument.set(params.dom, instance);\n logger.info(`${formatLogPrefix('garfish')} rendered successfully: ${params.appName}`);\n })\n .catch((error: Error) => {\n logger.error(`${formatLogPrefix('garfish')} render failed: ${params.appName}`, error);\n // 清理可能的部分状态\n instancesByDocument.delete(params.dom);\n // 重新抛出,让 Garfish 处理\n throw error;\n });\n },\n destroy(params: GarfishDestroyParams) {\n try {\n const instance = instancesByDocument.get(params.dom);\n if (instance) {\n instance.unmount();\n }\n instancesByDocument.delete(params.dom);\n logger.info(`${formatLogPrefix('garfish')} destroy completed`);\n } catch (error) {\n // 仅记录错误,允许 Garfish 继续清理其他资源\n logger.error(`${formatLogPrefix('garfish')} destroy failed`, error);\n }\n },\n };\n }\n\n return { provider };\n}\n","import logger from '@seed-fe/logger';\nimport type { MicroAppHooks, MicroAppInstance } from '../types/base';\nimport type { QiankunProps } from '../types/qiankun';\nimport { formatLogPrefix } from '../core/log';\n\n/**\n * 创建 qiankun 适配器:\n * - 提供 bootstrap/mount/unmount 标准生命周期\n * - 内部通过 Map<container, MicroAppInstance> 管理实例,支持多实例挂载\n * - 不关心具体渲染实现细节(React/Vue/纯 DOM 等)\n */\nexport function createQiankunAdapter(options: MicroAppHooks) {\n const { initRuntime, mountApp } = options;\n\n const instancesByContainer = new Map<Element | Document, MicroAppInstance>();\n\n async function bootstrap() {\n try {\n await initRuntime();\n logger.info(`${formatLogPrefix('qiankun')} bootstrap completed`);\n } catch (error) {\n logger.error(`${formatLogPrefix('qiankun')} bootstrap failed`, error);\n throw error;\n }\n }\n\n function mount(props: QiankunProps) {\n try {\n const container = props.container ?? document;\n const instance = mountApp({\n container,\n props,\n });\n instancesByContainer.set(container, instance);\n logger.info(`${formatLogPrefix('qiankun')} mount completed`);\n } catch (error) {\n logger.error(`${formatLogPrefix('qiankun')} mount failed`, error);\n throw error;\n }\n }\n\n function unmount(props?: QiankunProps) {\n try {\n const container = props?.container ?? document;\n const instance = instancesByContainer.get(container);\n instance?.unmount();\n instancesByContainer.delete(container);\n logger.info(`${formatLogPrefix('qiankun')} unmount completed`);\n } catch (error) {\n logger.error(`${formatLogPrefix('qiankun')} unmount failed`, error);\n throw error;\n }\n }\n\n return { bootstrap, mount, unmount };\n}\n","import { createGarfishAdapter } from '../hosts/garfish';\nimport { createQiankunAdapter } from '../hosts/qiankun';\nimport type { InitRuntimeFn, MicroAppInstance, MountAppFn, StartStandaloneFn } from '../types/base';\nimport type { GarfishExports } from '../types/garfish';\nimport type { QiankunProps } from '../types/qiankun';\nimport type { MicroFrontendHostAdapter } from './hostManager';\nimport { initMicroFrontendHosts } from './hostManager';\nimport type { StandaloneOptions } from './standalone';\n\nexport interface MicroFrontendAdapterOptions {\n /**\n * 微应用运行时初始化逻辑,由应用侧实现。\n * 典型职责:权限、认证、i18n 等一次性初始化。\n */\n initRuntime: InitRuntimeFn;\n /**\n * 微应用渲染逻辑,由应用侧实现。\n * - 适配层只关心 container / props 约定\n * - 内部可以是 React / Vue / 纯 DOM 等任意实现\n */\n mountApp: MountAppFn;\n /**\n * 独立运行模式入口,由应用侧实现。\n * - 一般通过 createStandaloneStarter({ initRuntime, mountApp }) 生成\n * - 适配层只在未检测到任何宿主时调用\n */\n startStandalone: StartStandaloneFn;\n /**\n * 内置宿主框架配置\n *\n * - 默认全部启用(garfish: true, qiankun: true)\n * - 设置为 false 可禁用特定框架\n * - 设置为 {} 等同于全部启用\n *\n * @example\n * ```ts\n * // 默认全部启用\n * createMicroFrontendAdapter({ initRuntime, mountApp, startStandalone });\n *\n * // 仅启用 garfish\n * createMicroFrontendAdapter({\n * initRuntime,\n * mountApp,\n * startStandalone,\n * hosts: { garfish: true, qiankun: false },\n * });\n *\n * // 禁用所有内置框架,仅使用 extraHosts\n * createMicroFrontendAdapter({\n * initRuntime,\n * mountApp,\n * startStandalone,\n * hosts: { garfish: false, qiankun: false },\n * extraHosts: [customHost],\n * });\n * ```\n */\n hosts?: {\n garfish?: boolean;\n qiankun?: boolean;\n };\n /**\n * 额外宿主配置,用于接入其他微前端库\n * - 适合其他团队维护的宿主,仅需在微应用中传入配置即可\n */\n extraHosts?: MicroFrontendHostAdapter[];\n}\n\nexport interface MicroFrontendAdapter {\n /**\n * 独立运行模式入口(直接透传应用侧实现)\n */\n startStandalone: (options?: StandaloneOptions) => Promise<MicroAppInstance>;\n /**\n * qiankun 生命周期适配结果\n * - 需要在微应用中按需导出:export const { bootstrap, mount, unmount } = runtime.qiankun ?? {};\n */\n qiankun?: {\n bootstrap: () => Promise<void>;\n mount: (props: QiankunProps) => void;\n unmount: (props?: QiankunProps) => void;\n };\n}\n\n/**\n * 创建微前端适配器:\n * - 接收应用侧的 initRuntime / mountApp / startStandalone\n * - 内部完成 Garfish / qiankun 等宿主的适配与检测\n * - 返回 qiankun 生命周期供微应用按需导出\n *\n * 微应用层只需要:\n * 1. 提供 initRuntime / mountApp / startStandalone\n * 2. 在入口处调用 createMicroFrontendAdapter(...)\n * 3. 若需要支持 qiankun,再将 adapter.qiankun 的三个生命周期导出\n */\nexport function createMicroFrontendAdapter(options: MicroFrontendAdapterOptions): MicroFrontendAdapter {\n const { initRuntime, mountApp, startStandalone, hosts, extraHosts } = options;\n\n // 默认全部启用\n const garfishEnabled = hosts?.garfish ?? true;\n const qiankunEnabled = hosts?.qiankun ?? true;\n\n const hostAdapters: MicroFrontendHostAdapter[] = [];\n\n // Garfish:通过 __GARFISH__ / __GARFISH_EXPORTS__ 适配 provider\n if (garfishEnabled) {\n const { provider } = createGarfishAdapter({\n initRuntime,\n mountApp: (garfishOptions) =>\n mountApp({\n container: garfishOptions.container,\n props: garfishOptions.props,\n }),\n });\n\n // 宿主模式下:若检测到 Garfish 标识,则立即挂载 provider。\n // 兼容两种注入方式:\n // - 宿主预先创建 __GARFISH_EXPORTS__\n // - 子应用自行创建 __GARFISH_EXPORTS__\n if (window.__GARFISH__) {\n const globalWithExports = globalThis as typeof globalThis & { __GARFISH_EXPORTS__?: GarfishExports };\n if (!globalWithExports.__GARFISH_EXPORTS__) {\n globalWithExports.__GARFISH_EXPORTS__ = {} as GarfishExports;\n }\n globalWithExports.__GARFISH_EXPORTS__.provider = provider;\n }\n\n hostAdapters.push({\n name: 'garfish',\n detect: () => Boolean(window.__GARFISH__),\n activate: () => {\n if (typeof __GARFISH_EXPORTS__ !== 'undefined') {\n __GARFISH_EXPORTS__.provider = provider;\n }\n },\n });\n }\n\n // qiankun:返回标准生命周期,由微应用按需导出\n let qiankunLifecycles: MicroFrontendAdapter['qiankun'];\n\n if (qiankunEnabled) {\n const { bootstrap, mount, unmount } = createQiankunAdapter({\n initRuntime,\n mountApp,\n });\n\n qiankunLifecycles = {\n bootstrap,\n mount,\n unmount,\n };\n\n // 将 qiankun 添加到 hosts 数组用于检测\n // 虽然 qiankun 不需要 activate(宿主会主动调用生命周期),\n // 但仍需要 detect 以防止错误地进入独立运行模式\n hostAdapters.push({\n name: 'qiankun',\n detect: () => Boolean(window.__POWERED_BY_QIANKUN__),\n });\n }\n\n if (extraHosts?.length) {\n hostAdapters.push(...extraHosts);\n }\n\n // 初始化宿主检测 + 独立运行回退\n void initMicroFrontendHosts({\n hosts: hostAdapters,\n fallback: () => startStandalone(),\n });\n\n return {\n startStandalone,\n qiankun: qiankunLifecycles,\n };\n}\n","import type { InitRuntimeFn, MicroAppInstance, MicroAppRuntimeProps, MountAppFn } from '../types/base';\n\nexport interface StandaloneOptions {\n container?: Element | Document;\n props?: MicroAppRuntimeProps;\n}\n\nexport interface StandaloneStarterOptions {\n initRuntime: InitRuntimeFn;\n mountApp: MountAppFn;\n}\n\n/**\n * 创建独立运行模式启动器:\n * - 统一处理非微前端宿主环境下的初始化逻辑\n * - 内部保证单例实例,避免重复挂载\n */\nexport function createStandaloneStarter(options: StandaloneStarterOptions) {\n const { initRuntime, mountApp } = options;\n\n let standaloneInstance: MicroAppInstance | null = null;\n\n return async function startStandalone(customOptions?: StandaloneOptions): Promise<MicroAppInstance> {\n if (standaloneInstance) {\n return standaloneInstance;\n }\n\n await initRuntime();\n\n standaloneInstance = mountApp({\n container: customOptions?.container ?? document,\n props: customOptions?.props,\n });\n\n return standaloneInstance;\n };\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -27,7 +27,7 @@ interface MicroAppConfig {
27
27
  * - 不关心具体实现细节(权限 / 认证 / i18n 等)
28
28
  * - 支持宿主透传扩展字段
29
29
  */
30
- interface RuntimeProps {
30
+ interface MicroAppRuntimeProps {
31
31
  /**
32
32
  * 主应用传递的微应用配置信息
33
33
  *
@@ -47,7 +47,7 @@ interface RuntimeProps {
47
47
  *
48
48
  * 由微应用自行决定实例内部结构,这里只约定必须提供 unmount 方法。
49
49
  */
50
- interface AppInstance {
50
+ interface MicroAppInstance {
51
51
  unmount(): void;
52
52
  }
53
53
  /**
@@ -67,15 +67,15 @@ interface AppInstance {
67
67
  */
68
68
  type InitRuntimeFn = () => Promise<void>;
69
69
  /**
70
- * 微应用渲染函数类型
70
+ * 微应用挂载函数类型
71
71
  *
72
72
  * 不关心具体框架(React / Vue / 纯 DOM),仅约定返回包含 unmount() 的实例
73
73
  *
74
74
  * @example
75
75
  * ```ts
76
- * import type { RenderAppFn } from '@seed-fe/mf-adapters';
76
+ * import type { MountAppFn } from '@seed-fe/mf-adapters';
77
77
  *
78
- * export const renderApp: RenderAppFn = ({ container, props }) => {
78
+ * export const mountApp: MountAppFn = ({ container, props }) => {
79
79
  * const root = createRoot(container as HTMLElement);
80
80
  * root.render(<App {...props} />);
81
81
  *
@@ -87,10 +87,10 @@ type InitRuntimeFn = () => Promise<void>;
87
87
  * };
88
88
  * ```
89
89
  */
90
- type RenderAppFn = (options: {
90
+ type MountAppFn = (options: {
91
91
  container: Element | Document;
92
- props?: RuntimeProps;
93
- }) => AppInstance;
92
+ props?: MicroAppRuntimeProps;
93
+ }) => MicroAppInstance;
94
94
  /**
95
95
  * 独立运行模式启动函数类型
96
96
  *
@@ -102,7 +102,7 @@ type RenderAppFn = (options: {
102
102
  *
103
103
  * export const startStandalone: StartStandaloneFn = async (options) => {
104
104
  * await initRuntime();
105
- * return renderApp({
105
+ * return mountApp({
106
106
  * container: options?.container ?? document,
107
107
  * props: options?.props,
108
108
  * });
@@ -110,16 +110,16 @@ type RenderAppFn = (options: {
110
110
  * ```
111
111
  */
112
112
  type StartStandaloneFn = (options?: {
113
- container?: Document;
114
- props?: RuntimeProps;
115
- }) => Promise<AppInstance>;
113
+ container?: Element | Document;
114
+ props?: MicroAppRuntimeProps;
115
+ }) => Promise<MicroAppInstance>;
116
116
  /**
117
- * 宿主适配器选项契约
117
+ * 微应用入口契约(由微应用侧实现)
118
118
  *
119
119
  * - 适用于所有微前端宿主(Garfish / qiankun / 未来扩展)
120
120
  * - 定义了微应用侧必须实现的两个核心函数
121
121
  */
122
- interface AdapterOptions {
122
+ interface MicroAppHooks {
123
123
  /**
124
124
  * 微应用运行时初始化逻辑
125
125
  *
@@ -133,10 +133,10 @@ interface AdapterOptions {
133
133
  * - 不关心具体框架(React / Vue / 纯 DOM)
134
134
  * - 仅约定返回包含 unmount() 的实例
135
135
  */
136
- renderApp: RenderAppFn;
136
+ mountApp: MountAppFn;
137
137
  }
138
138
 
139
- interface HostAdapterConfig {
139
+ interface MicroFrontendHostAdapter {
140
140
  name: string;
141
141
  /**
142
142
  * 返回 true 表示当前宿主命中
@@ -147,17 +147,17 @@ interface HostAdapterConfig {
147
147
  */
148
148
  activate?(): void | Promise<void>;
149
149
  }
150
- interface HostManagerOptions {
151
- hosts: HostAdapterConfig[];
150
+ interface InitMicroFrontendHostsOptions {
151
+ hosts: MicroFrontendHostAdapter[];
152
152
  /**
153
- * 当未检测到任何宿主标识时的回退逻辑,一般为 startStandaloneApp
153
+ * 当未检测到任何宿主标识时的回退逻辑,一般为 startStandalone
154
154
  */
155
- fallback: () => Promise<AppInstance> | Promise<unknown>;
155
+ fallback: () => Promise<MicroAppInstance> | Promise<unknown>;
156
156
  }
157
157
  /**
158
158
  * 根据宿主环境动态选择微前端框架,若未检测到宿主则回退为独立运行模式。
159
159
  */
160
- declare function initMicroFrontendHosts(options: HostManagerOptions): Promise<void>;
160
+ declare function initMicroFrontendHosts(options: InitMicroFrontendHostsOptions): Promise<void>;
161
161
 
162
162
  /**
163
163
  * qiankun 相关类型声明与全局接口扩展。
@@ -173,26 +173,26 @@ declare global {
173
173
  }
174
174
  }
175
175
  /** qiankun 生命周期 props */
176
- interface QiankunProps extends RuntimeProps {
176
+ interface QiankunProps extends MicroAppRuntimeProps {
177
177
  container?: Element;
178
178
  }
179
179
 
180
180
  interface StandaloneOptions {
181
- container?: Document;
182
- props?: RuntimeProps;
181
+ container?: Element | Document;
182
+ props?: MicroAppRuntimeProps;
183
183
  }
184
184
  interface StandaloneStarterOptions {
185
185
  initRuntime: InitRuntimeFn;
186
- renderApp: RenderAppFn;
186
+ mountApp: MountAppFn;
187
187
  }
188
188
  /**
189
189
  * 创建独立运行模式启动器:
190
190
  * - 统一处理非微前端宿主环境下的初始化逻辑
191
191
  * - 内部保证单例实例,避免重复挂载
192
192
  */
193
- declare function createStandaloneStarter(options: StandaloneStarterOptions): (customOptions?: StandaloneOptions) => Promise<AppInstance>;
193
+ declare function createStandaloneStarter(options: StandaloneStarterOptions): (customOptions?: StandaloneOptions) => Promise<MicroAppInstance>;
194
194
 
195
- interface MicroAppRuntimeOptions {
195
+ interface MicroFrontendAdapterOptions {
196
196
  /**
197
197
  * 微应用运行时初始化逻辑,由应用侧实现。
198
198
  * 典型职责:权限、认证、i18n 等一次性初始化。
@@ -203,10 +203,10 @@ interface MicroAppRuntimeOptions {
203
203
  * - 适配层只关心 container / props 约定
204
204
  * - 内部可以是 React / Vue / 纯 DOM 等任意实现
205
205
  */
206
- mountApp: RenderAppFn;
206
+ mountApp: MountAppFn;
207
207
  /**
208
208
  * 独立运行模式入口,由应用侧实现。
209
- * - 一般通过 createStandaloneStarter(initRuntime, renderApp) 生成
209
+ * - 一般通过 createStandaloneStarter({ initRuntime, mountApp }) 生成
210
210
  * - 适配层只在未检测到任何宿主时调用
211
211
  */
212
212
  startStandalone: StartStandaloneFn;
@@ -220,10 +220,10 @@ interface MicroAppRuntimeOptions {
220
220
  * @example
221
221
  * ```ts
222
222
  * // 默认全部启用
223
- * createMicroAppRuntime({ initRuntime, mountApp, startStandalone });
223
+ * createMicroFrontendAdapter({ initRuntime, mountApp, startStandalone });
224
224
  *
225
225
  * // 仅启用 garfish
226
- * createMicroAppRuntime({
226
+ * createMicroFrontendAdapter({
227
227
  * initRuntime,
228
228
  * mountApp,
229
229
  * startStandalone,
@@ -231,7 +231,7 @@ interface MicroAppRuntimeOptions {
231
231
  * });
232
232
  *
233
233
  * // 禁用所有内置框架,仅使用 extraHosts
234
- * createMicroAppRuntime({
234
+ * createMicroFrontendAdapter({
235
235
  * initRuntime,
236
236
  * mountApp,
237
237
  * startStandalone,
@@ -248,13 +248,13 @@ interface MicroAppRuntimeOptions {
248
248
  * 额外宿主配置,用于接入其他微前端库
249
249
  * - 适合其他团队维护的宿主,仅需在微应用中传入配置即可
250
250
  */
251
- extraHosts?: HostAdapterConfig[];
251
+ extraHosts?: MicroFrontendHostAdapter[];
252
252
  }
253
- interface MicroAppRuntime {
253
+ interface MicroFrontendAdapter {
254
254
  /**
255
255
  * 独立运行模式入口(直接透传应用侧实现)
256
256
  */
257
- startStandaloneApp: (options?: StandaloneOptions) => Promise<AppInstance>;
257
+ startStandalone: (options?: StandaloneOptions) => Promise<MicroAppInstance>;
258
258
  /**
259
259
  * qiankun 生命周期适配结果
260
260
  * - 需要在微应用中按需导出:export const { bootstrap, mount, unmount } = runtime.qiankun ?? {};
@@ -266,17 +266,17 @@ interface MicroAppRuntime {
266
266
  };
267
267
  }
268
268
  /**
269
- * 创建微应用运行时适配:
269
+ * 创建微前端适配器:
270
270
  * - 接收应用侧的 initRuntime / mountApp / startStandalone
271
271
  * - 内部完成 Garfish / qiankun 等宿主的适配与检测
272
272
  * - 返回 qiankun 生命周期供微应用按需导出
273
273
  *
274
274
  * 微应用层只需要:
275
275
  * 1. 提供 initRuntime / mountApp / startStandalone
276
- * 2. 在入口处调用 createMicroAppRuntime(...)
277
- * 3. 若需要支持 qiankun,再将 runtime.qiankun 的三个生命周期导出
276
+ * 2. 在入口处调用 createMicroFrontendAdapter(...)
277
+ * 3. 若需要支持 qiankun,再将 adapter.qiankun 的三个生命周期导出
278
278
  */
279
- declare function createMicroAppRuntime(options: MicroAppRuntimeOptions): MicroAppRuntime;
279
+ declare function createMicroFrontendAdapter(options: MicroFrontendAdapterOptions): MicroFrontendAdapter;
280
280
 
281
281
  /**
282
282
  * Garfish 相关类型声明与全局接口扩展。
@@ -300,14 +300,14 @@ interface GarfishRenderParams {
300
300
  dom: Document;
301
301
  basename?: string;
302
302
  appRenderInfo: GarfishAppRenderInfo;
303
- props?: RuntimeProps;
303
+ props?: MicroAppRuntimeProps;
304
304
  }
305
305
  /** Garfish destroy 钩子参数 */
306
306
  interface GarfishDestroyParams {
307
307
  appName: string;
308
308
  dom: Document;
309
309
  appRenderInfo: GarfishAppRenderInfo;
310
- props?: RuntimeProps;
310
+ props?: MicroAppRuntimeProps;
311
311
  }
312
312
  /** Garfish 应用渲染信息 */
313
313
  interface GarfishAppRenderInfo {
@@ -317,7 +317,7 @@ interface GarfishAppRenderInfo {
317
317
  /** Garfish 导出对象接口 */
318
318
  interface GarfishExports {
319
319
  provider: () => {
320
- render: (params: GarfishRenderParams) => void;
320
+ render: (params: GarfishRenderParams) => void | Promise<void>;
321
321
  destroy: (params: GarfishDestroyParams) => void;
322
322
  };
323
323
  }
@@ -325,28 +325,26 @@ interface GarfishExports {
325
325
  /**
326
326
  * 创建 Garfish 适配器:
327
327
  * - 提供 provider() 给 Garfish 宿主使用
328
- * - 内部通过 Map<Document, AppInstance> 管理实例,支持多容器挂载
328
+ * - 内部通过 Map<Document, MicroAppInstance> 管理实例,支持多容器挂载
329
329
  * - 不关心具体渲染实现细节(React/Vue/纯 DOM 等)
330
330
  */
331
- declare function createGarfishAdapter(options: AdapterOptions): {
331
+ declare function createGarfishAdapter(options: MicroAppHooks): {
332
332
  provider: () => {
333
333
  render(params: GarfishRenderParams): Promise<void>;
334
334
  destroy(params: GarfishDestroyParams): void;
335
335
  };
336
336
  };
337
337
 
338
- /** @deprecated 使用 AdapterOptions 替代 */
339
- type QiankunAdapterOptions = AdapterOptions;
340
338
  /**
341
339
  * 创建 qiankun 适配器:
342
340
  * - 提供 bootstrap/mount/unmount 标准生命周期
343
- * - 内部通过 Map<container, AppInstance> 管理实例,支持多实例挂载
341
+ * - 内部通过 Map<container, MicroAppInstance> 管理实例,支持多实例挂载
344
342
  * - 不关心具体渲染实现细节(React/Vue/纯 DOM 等)
345
343
  */
346
- declare function createQiankunAdapter(options: AdapterOptions): {
344
+ declare function createQiankunAdapter(options: MicroAppHooks): {
347
345
  bootstrap: () => Promise<void>;
348
346
  mount: (props: QiankunProps) => void;
349
347
  unmount: (props?: QiankunProps) => void;
350
348
  };
351
349
 
352
- export { type AdapterOptions, type AppInstance, type GarfishAppRenderInfo, type GarfishDestroyParams, type GarfishExports, type GarfishRenderParams, type HostAdapterConfig, type HostManagerOptions, type InitRuntimeFn, type MicroAppConfig, type MicroAppRuntime, type MicroAppRuntimeOptions, type QiankunAdapterOptions, type QiankunProps, type RenderAppFn, type RuntimeProps, type StandaloneOptions, type StandaloneStarterOptions, type StartStandaloneFn, createGarfishAdapter, createMicroAppRuntime, createQiankunAdapter, createStandaloneStarter, initMicroFrontendHosts };
350
+ export { type GarfishAppRenderInfo, type GarfishDestroyParams, type GarfishExports, type GarfishRenderParams, type InitMicroFrontendHostsOptions, type InitRuntimeFn, type MicroAppConfig, type MicroAppHooks, type MicroAppInstance, type MicroAppRuntimeProps, type MicroFrontendAdapter, type MicroFrontendAdapterOptions, type MicroFrontendHostAdapter, type MountAppFn, type QiankunProps, type StandaloneOptions, type StandaloneStarterOptions, type StartStandaloneFn, createGarfishAdapter, createMicroFrontendAdapter, createQiankunAdapter, createStandaloneStarter, initMicroFrontendHosts };
package/dist/index.d.ts CHANGED
@@ -27,7 +27,7 @@ interface MicroAppConfig {
27
27
  * - 不关心具体实现细节(权限 / 认证 / i18n 等)
28
28
  * - 支持宿主透传扩展字段
29
29
  */
30
- interface RuntimeProps {
30
+ interface MicroAppRuntimeProps {
31
31
  /**
32
32
  * 主应用传递的微应用配置信息
33
33
  *
@@ -47,7 +47,7 @@ interface RuntimeProps {
47
47
  *
48
48
  * 由微应用自行决定实例内部结构,这里只约定必须提供 unmount 方法。
49
49
  */
50
- interface AppInstance {
50
+ interface MicroAppInstance {
51
51
  unmount(): void;
52
52
  }
53
53
  /**
@@ -67,15 +67,15 @@ interface AppInstance {
67
67
  */
68
68
  type InitRuntimeFn = () => Promise<void>;
69
69
  /**
70
- * 微应用渲染函数类型
70
+ * 微应用挂载函数类型
71
71
  *
72
72
  * 不关心具体框架(React / Vue / 纯 DOM),仅约定返回包含 unmount() 的实例
73
73
  *
74
74
  * @example
75
75
  * ```ts
76
- * import type { RenderAppFn } from '@seed-fe/mf-adapters';
76
+ * import type { MountAppFn } from '@seed-fe/mf-adapters';
77
77
  *
78
- * export const renderApp: RenderAppFn = ({ container, props }) => {
78
+ * export const mountApp: MountAppFn = ({ container, props }) => {
79
79
  * const root = createRoot(container as HTMLElement);
80
80
  * root.render(<App {...props} />);
81
81
  *
@@ -87,10 +87,10 @@ type InitRuntimeFn = () => Promise<void>;
87
87
  * };
88
88
  * ```
89
89
  */
90
- type RenderAppFn = (options: {
90
+ type MountAppFn = (options: {
91
91
  container: Element | Document;
92
- props?: RuntimeProps;
93
- }) => AppInstance;
92
+ props?: MicroAppRuntimeProps;
93
+ }) => MicroAppInstance;
94
94
  /**
95
95
  * 独立运行模式启动函数类型
96
96
  *
@@ -102,7 +102,7 @@ type RenderAppFn = (options: {
102
102
  *
103
103
  * export const startStandalone: StartStandaloneFn = async (options) => {
104
104
  * await initRuntime();
105
- * return renderApp({
105
+ * return mountApp({
106
106
  * container: options?.container ?? document,
107
107
  * props: options?.props,
108
108
  * });
@@ -110,16 +110,16 @@ type RenderAppFn = (options: {
110
110
  * ```
111
111
  */
112
112
  type StartStandaloneFn = (options?: {
113
- container?: Document;
114
- props?: RuntimeProps;
115
- }) => Promise<AppInstance>;
113
+ container?: Element | Document;
114
+ props?: MicroAppRuntimeProps;
115
+ }) => Promise<MicroAppInstance>;
116
116
  /**
117
- * 宿主适配器选项契约
117
+ * 微应用入口契约(由微应用侧实现)
118
118
  *
119
119
  * - 适用于所有微前端宿主(Garfish / qiankun / 未来扩展)
120
120
  * - 定义了微应用侧必须实现的两个核心函数
121
121
  */
122
- interface AdapterOptions {
122
+ interface MicroAppHooks {
123
123
  /**
124
124
  * 微应用运行时初始化逻辑
125
125
  *
@@ -133,10 +133,10 @@ interface AdapterOptions {
133
133
  * - 不关心具体框架(React / Vue / 纯 DOM)
134
134
  * - 仅约定返回包含 unmount() 的实例
135
135
  */
136
- renderApp: RenderAppFn;
136
+ mountApp: MountAppFn;
137
137
  }
138
138
 
139
- interface HostAdapterConfig {
139
+ interface MicroFrontendHostAdapter {
140
140
  name: string;
141
141
  /**
142
142
  * 返回 true 表示当前宿主命中
@@ -147,17 +147,17 @@ interface HostAdapterConfig {
147
147
  */
148
148
  activate?(): void | Promise<void>;
149
149
  }
150
- interface HostManagerOptions {
151
- hosts: HostAdapterConfig[];
150
+ interface InitMicroFrontendHostsOptions {
151
+ hosts: MicroFrontendHostAdapter[];
152
152
  /**
153
- * 当未检测到任何宿主标识时的回退逻辑,一般为 startStandaloneApp
153
+ * 当未检测到任何宿主标识时的回退逻辑,一般为 startStandalone
154
154
  */
155
- fallback: () => Promise<AppInstance> | Promise<unknown>;
155
+ fallback: () => Promise<MicroAppInstance> | Promise<unknown>;
156
156
  }
157
157
  /**
158
158
  * 根据宿主环境动态选择微前端框架,若未检测到宿主则回退为独立运行模式。
159
159
  */
160
- declare function initMicroFrontendHosts(options: HostManagerOptions): Promise<void>;
160
+ declare function initMicroFrontendHosts(options: InitMicroFrontendHostsOptions): Promise<void>;
161
161
 
162
162
  /**
163
163
  * qiankun 相关类型声明与全局接口扩展。
@@ -173,26 +173,26 @@ declare global {
173
173
  }
174
174
  }
175
175
  /** qiankun 生命周期 props */
176
- interface QiankunProps extends RuntimeProps {
176
+ interface QiankunProps extends MicroAppRuntimeProps {
177
177
  container?: Element;
178
178
  }
179
179
 
180
180
  interface StandaloneOptions {
181
- container?: Document;
182
- props?: RuntimeProps;
181
+ container?: Element | Document;
182
+ props?: MicroAppRuntimeProps;
183
183
  }
184
184
  interface StandaloneStarterOptions {
185
185
  initRuntime: InitRuntimeFn;
186
- renderApp: RenderAppFn;
186
+ mountApp: MountAppFn;
187
187
  }
188
188
  /**
189
189
  * 创建独立运行模式启动器:
190
190
  * - 统一处理非微前端宿主环境下的初始化逻辑
191
191
  * - 内部保证单例实例,避免重复挂载
192
192
  */
193
- declare function createStandaloneStarter(options: StandaloneStarterOptions): (customOptions?: StandaloneOptions) => Promise<AppInstance>;
193
+ declare function createStandaloneStarter(options: StandaloneStarterOptions): (customOptions?: StandaloneOptions) => Promise<MicroAppInstance>;
194
194
 
195
- interface MicroAppRuntimeOptions {
195
+ interface MicroFrontendAdapterOptions {
196
196
  /**
197
197
  * 微应用运行时初始化逻辑,由应用侧实现。
198
198
  * 典型职责:权限、认证、i18n 等一次性初始化。
@@ -203,10 +203,10 @@ interface MicroAppRuntimeOptions {
203
203
  * - 适配层只关心 container / props 约定
204
204
  * - 内部可以是 React / Vue / 纯 DOM 等任意实现
205
205
  */
206
- mountApp: RenderAppFn;
206
+ mountApp: MountAppFn;
207
207
  /**
208
208
  * 独立运行模式入口,由应用侧实现。
209
- * - 一般通过 createStandaloneStarter(initRuntime, renderApp) 生成
209
+ * - 一般通过 createStandaloneStarter({ initRuntime, mountApp }) 生成
210
210
  * - 适配层只在未检测到任何宿主时调用
211
211
  */
212
212
  startStandalone: StartStandaloneFn;
@@ -220,10 +220,10 @@ interface MicroAppRuntimeOptions {
220
220
  * @example
221
221
  * ```ts
222
222
  * // 默认全部启用
223
- * createMicroAppRuntime({ initRuntime, mountApp, startStandalone });
223
+ * createMicroFrontendAdapter({ initRuntime, mountApp, startStandalone });
224
224
  *
225
225
  * // 仅启用 garfish
226
- * createMicroAppRuntime({
226
+ * createMicroFrontendAdapter({
227
227
  * initRuntime,
228
228
  * mountApp,
229
229
  * startStandalone,
@@ -231,7 +231,7 @@ interface MicroAppRuntimeOptions {
231
231
  * });
232
232
  *
233
233
  * // 禁用所有内置框架,仅使用 extraHosts
234
- * createMicroAppRuntime({
234
+ * createMicroFrontendAdapter({
235
235
  * initRuntime,
236
236
  * mountApp,
237
237
  * startStandalone,
@@ -248,13 +248,13 @@ interface MicroAppRuntimeOptions {
248
248
  * 额外宿主配置,用于接入其他微前端库
249
249
  * - 适合其他团队维护的宿主,仅需在微应用中传入配置即可
250
250
  */
251
- extraHosts?: HostAdapterConfig[];
251
+ extraHosts?: MicroFrontendHostAdapter[];
252
252
  }
253
- interface MicroAppRuntime {
253
+ interface MicroFrontendAdapter {
254
254
  /**
255
255
  * 独立运行模式入口(直接透传应用侧实现)
256
256
  */
257
- startStandaloneApp: (options?: StandaloneOptions) => Promise<AppInstance>;
257
+ startStandalone: (options?: StandaloneOptions) => Promise<MicroAppInstance>;
258
258
  /**
259
259
  * qiankun 生命周期适配结果
260
260
  * - 需要在微应用中按需导出:export const { bootstrap, mount, unmount } = runtime.qiankun ?? {};
@@ -266,17 +266,17 @@ interface MicroAppRuntime {
266
266
  };
267
267
  }
268
268
  /**
269
- * 创建微应用运行时适配:
269
+ * 创建微前端适配器:
270
270
  * - 接收应用侧的 initRuntime / mountApp / startStandalone
271
271
  * - 内部完成 Garfish / qiankun 等宿主的适配与检测
272
272
  * - 返回 qiankun 生命周期供微应用按需导出
273
273
  *
274
274
  * 微应用层只需要:
275
275
  * 1. 提供 initRuntime / mountApp / startStandalone
276
- * 2. 在入口处调用 createMicroAppRuntime(...)
277
- * 3. 若需要支持 qiankun,再将 runtime.qiankun 的三个生命周期导出
276
+ * 2. 在入口处调用 createMicroFrontendAdapter(...)
277
+ * 3. 若需要支持 qiankun,再将 adapter.qiankun 的三个生命周期导出
278
278
  */
279
- declare function createMicroAppRuntime(options: MicroAppRuntimeOptions): MicroAppRuntime;
279
+ declare function createMicroFrontendAdapter(options: MicroFrontendAdapterOptions): MicroFrontendAdapter;
280
280
 
281
281
  /**
282
282
  * Garfish 相关类型声明与全局接口扩展。
@@ -300,14 +300,14 @@ interface GarfishRenderParams {
300
300
  dom: Document;
301
301
  basename?: string;
302
302
  appRenderInfo: GarfishAppRenderInfo;
303
- props?: RuntimeProps;
303
+ props?: MicroAppRuntimeProps;
304
304
  }
305
305
  /** Garfish destroy 钩子参数 */
306
306
  interface GarfishDestroyParams {
307
307
  appName: string;
308
308
  dom: Document;
309
309
  appRenderInfo: GarfishAppRenderInfo;
310
- props?: RuntimeProps;
310
+ props?: MicroAppRuntimeProps;
311
311
  }
312
312
  /** Garfish 应用渲染信息 */
313
313
  interface GarfishAppRenderInfo {
@@ -317,7 +317,7 @@ interface GarfishAppRenderInfo {
317
317
  /** Garfish 导出对象接口 */
318
318
  interface GarfishExports {
319
319
  provider: () => {
320
- render: (params: GarfishRenderParams) => void;
320
+ render: (params: GarfishRenderParams) => void | Promise<void>;
321
321
  destroy: (params: GarfishDestroyParams) => void;
322
322
  };
323
323
  }
@@ -325,28 +325,26 @@ interface GarfishExports {
325
325
  /**
326
326
  * 创建 Garfish 适配器:
327
327
  * - 提供 provider() 给 Garfish 宿主使用
328
- * - 内部通过 Map<Document, AppInstance> 管理实例,支持多容器挂载
328
+ * - 内部通过 Map<Document, MicroAppInstance> 管理实例,支持多容器挂载
329
329
  * - 不关心具体渲染实现细节(React/Vue/纯 DOM 等)
330
330
  */
331
- declare function createGarfishAdapter(options: AdapterOptions): {
331
+ declare function createGarfishAdapter(options: MicroAppHooks): {
332
332
  provider: () => {
333
333
  render(params: GarfishRenderParams): Promise<void>;
334
334
  destroy(params: GarfishDestroyParams): void;
335
335
  };
336
336
  };
337
337
 
338
- /** @deprecated 使用 AdapterOptions 替代 */
339
- type QiankunAdapterOptions = AdapterOptions;
340
338
  /**
341
339
  * 创建 qiankun 适配器:
342
340
  * - 提供 bootstrap/mount/unmount 标准生命周期
343
- * - 内部通过 Map<container, AppInstance> 管理实例,支持多实例挂载
341
+ * - 内部通过 Map<container, MicroAppInstance> 管理实例,支持多实例挂载
344
342
  * - 不关心具体渲染实现细节(React/Vue/纯 DOM 等)
345
343
  */
346
- declare function createQiankunAdapter(options: AdapterOptions): {
344
+ declare function createQiankunAdapter(options: MicroAppHooks): {
347
345
  bootstrap: () => Promise<void>;
348
346
  mount: (props: QiankunProps) => void;
349
347
  unmount: (props?: QiankunProps) => void;
350
348
  };
351
349
 
352
- export { type AdapterOptions, type AppInstance, type GarfishAppRenderInfo, type GarfishDestroyParams, type GarfishExports, type GarfishRenderParams, type HostAdapterConfig, type HostManagerOptions, type InitRuntimeFn, type MicroAppConfig, type MicroAppRuntime, type MicroAppRuntimeOptions, type QiankunAdapterOptions, type QiankunProps, type RenderAppFn, type RuntimeProps, type StandaloneOptions, type StandaloneStarterOptions, type StartStandaloneFn, createGarfishAdapter, createMicroAppRuntime, createQiankunAdapter, createStandaloneStarter, initMicroFrontendHosts };
350
+ export { type GarfishAppRenderInfo, type GarfishDestroyParams, type GarfishExports, type GarfishRenderParams, type InitMicroFrontendHostsOptions, type InitRuntimeFn, type MicroAppConfig, type MicroAppHooks, type MicroAppInstance, type MicroAppRuntimeProps, type MicroFrontendAdapter, type MicroFrontendAdapterOptions, type MicroFrontendHostAdapter, type MountAppFn, type QiankunProps, type StandaloneOptions, type StandaloneStarterOptions, type StartStandaloneFn, createGarfishAdapter, createMicroFrontendAdapter, createQiankunAdapter, createStandaloneStarter, initMicroFrontendHosts };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import u from'@seed-fe/logger';var _=false;async function h(p){if(_)return;let{hosts:o,fallback:i}=p;for(let n of o)if(n.detect()){u.info(`[mf-runtime] detected micro-frontend host: ${n.name}`);try{await n.activate?.(),_=!0,u.info(`[mf-runtime] activated micro-frontend host: ${n.name}`);return}catch(s){u.error(`[mf-runtime] failed to activate ${n.name}, trying fallback`,s);}}_||(u.info("[mf-runtime] fallback to standalone mode"),await i());}function y(p){let{initRuntime:o,renderApp:i}=p,n=new Map;function s(){return {render(t){return o().then(()=>{let r=i({container:t.dom,props:{...t.props,app:t.props?.app}});n.set(t.dom,r),u.info(`[mf-runtime][garfish] rendered successfully: ${t.appName}`);}).catch(r=>{throw u.error(`[mf-runtime][garfish] render failed: ${t.appName}`,r),n.delete(t.dom),r})},destroy(t){try{let r=n.get(t.dom);r&&r.unmount(),n.delete(t.dom),u.info("[mf-runtime][garfish] destroy completed");}catch(r){u.error("[mf-runtime][garfish] destroy failed",r);}}}}return {provider:s}}function g(p){let{initRuntime:o,renderApp:i}=p,n=new Map;async function s(){try{await o(),u.info("[mf-runtime][qiankun] bootstrap completed");}catch(a){throw u.error("[mf-runtime][qiankun] bootstrap failed",a),a}}function t(a){try{let e=a.container??document,d=i({container:e,props:{...a,app:a.app}});n.set(e,d),u.info("[mf-runtime][qiankun] mount completed");}catch(e){throw u.error("[mf-runtime][qiankun] mount failed",e),e}}function r(a){try{let e=a?.container??document;n.get(e)?.unmount(),n.delete(e),u.info("[mf-runtime][qiankun] unmount completed");}catch(e){throw u.error("[mf-runtime][qiankun] unmount failed",e),e}}return {bootstrap:s,mount:t,unmount:r}}function D(p){let{initRuntime:o,mountApp:i,startStandalone:n,hosts:s,extraHosts:t}=p,r=s?.garfish??true,a=s?.qiankun??true,e=[];if(r){let{provider:l}=y({initRuntime:o,renderApp:m=>i({container:m.container,props:m.props})});if(typeof window<"u"&&window.__GARFISH__){let m=globalThis;m.__GARFISH_EXPORTS__||(m.__GARFISH_EXPORTS__={}),m.__GARFISH_EXPORTS__.provider=l;}e.push({name:"garfish",detect:()=>!!window.__GARFISH__,activate:()=>{typeof __GARFISH_EXPORTS__<"u"&&(__GARFISH_EXPORTS__.provider=l);}});}let d;if(a){let{bootstrap:l,mount:m,unmount:P}=g({initRuntime:o,renderApp:i});d={bootstrap:l,mount:m,unmount:P},e.push({name:"qiankun",detect:()=>!!window.__POWERED_BY_QIANKUN__,activate:()=>{u.info("[mf-adapter] qiankun");}});}return t?.length&&e.push(...t),h({hosts:e,fallback:()=>n()}),{startStandaloneApp:n,qiankun:d}}function N(p){let{initRuntime:o,renderApp:i}=p,n=null;return async function(t){return n||(await o(),n=i({container:t?.container??document,props:t?.props}),n)}}export{y as createGarfishAdapter,D as createMicroAppRuntime,g as createQiankunAdapter,N as createStandaloneStarter,h as initMicroFrontendHosts};//# sourceMappingURL=index.js.map
1
+ import d from'@seed-fe/logger';var R="@seed-fe/mf-adapters";function o(i){return i?`[${R}][${i}]`:`[${R}]`}var _=false;async function y(i){if(_)return;let{hosts:a,fallback:p}=i;for(let t of a)if(t.detect()){d.info(`${o("host-manager")} detected host: ${t.name}`);try{await t.activate?.(),_=!0,d.info(`${o("host-manager")} activated host: ${t.name}`);return}catch(s){d.error(`${o("host-manager")} failed to activate ${t.name}, trying fallback`,s);}}_||(d.info(`${o("host-manager")} fallback to standalone mode`),await p(),_=true);}function P(i){let{initRuntime:a,mountApp:p}=i,t=new Map;function s(){return {render(n){return a().then(()=>{let e=p({container:n.dom,props:n.props});t.set(n.dom,e),d.info(`${o("garfish")} rendered successfully: ${n.appName}`);}).catch(e=>{throw d.error(`${o("garfish")} render failed: ${n.appName}`,e),t.delete(n.dom),e})},destroy(n){try{let e=t.get(n.dom);e&&e.unmount(),t.delete(n.dom),d.info(`${o("garfish")} destroy completed`);}catch(e){d.error(`${o("garfish")} destroy failed`,e);}}}}return {provider:s}}function g(i){let{initRuntime:a,mountApp:p}=i,t=new Map;async function s(){try{await a(),d.info(`${o("qiankun")} bootstrap completed`);}catch(c){throw d.error(`${o("qiankun")} bootstrap failed`,c),c}}function n(c){try{let r=c.container??document,l=p({container:r,props:c});t.set(r,l),d.info(`${o("qiankun")} mount completed`);}catch(r){throw d.error(`${o("qiankun")} mount failed`,r),r}}function e(c){try{let r=c?.container??document;t.get(r)?.unmount(),t.delete(r),d.info(`${o("qiankun")} unmount completed`);}catch(r){throw d.error(`${o("qiankun")} unmount failed`,r),r}}return {bootstrap:s,mount:n,unmount:e}}function X(i){let{initRuntime:a,mountApp:p,startStandalone:t,hosts:s,extraHosts:n}=i,e=s?.garfish??true,c=s?.qiankun??true,r=[];if(e){let{provider:A}=P({initRuntime:a,mountApp:u=>p({container:u.container,props:u.props})});if(window.__GARFISH__){let u=globalThis;u.__GARFISH_EXPORTS__||(u.__GARFISH_EXPORTS__={}),u.__GARFISH_EXPORTS__.provider=A;}r.push({name:"garfish",detect:()=>!!window.__GARFISH__,activate:()=>{typeof __GARFISH_EXPORTS__<"u"&&(__GARFISH_EXPORTS__.provider=A);}});}let l;if(c){let{bootstrap:A,mount:u,unmount:x}=g({initRuntime:a,mountApp:p});l={bootstrap:A,mount:u,unmount:x},r.push({name:"qiankun",detect:()=>!!window.__POWERED_BY_QIANKUN__});}return n?.length&&r.push(...n),y({hosts:r,fallback:()=>t()}),{startStandalone:t,qiankun:l}}function W(i){let{initRuntime:a,mountApp:p}=i,t=null;return async function(n){return t||(await a(),t=p({container:n?.container??document,props:n?.props}),t)}}export{P as createGarfishAdapter,X as createMicroFrontendAdapter,g as createQiankunAdapter,W as createStandaloneStarter,y as initMicroFrontendHosts};//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/hostManager.ts","../src/hosts/garfish.ts","../src/hosts/qiankun.ts","../src/core/setup.ts","../src/core/standalone.ts"],"names":["microFrontendResolved","initMicroFrontendHosts","options","hosts","fallback","host","logger","error","createGarfishAdapter","initRuntime","renderApp","instances","provider","params","instance","createQiankunAdapter","bootstrap","mount","props","container","unmount","createMicroAppRuntime","mountApp","startStandalone","extraHosts","garfishEnabled","qiankunEnabled","hostAdapters","garfishOptions","globalWithExports","qiankunRuntime","createStandaloneStarter","standaloneInstance","customOptions"],"mappings":"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","file":"index.js","sourcesContent":["import logger from '@seed-fe/logger';\nimport type { AppInstance } from '../types/base';\n\nexport interface HostAdapterConfig {\n name: string;\n /**\n * 返回 true 表示当前宿主命中\n */\n detect(): boolean;\n /**\n * 命中宿主后调用,用于注册生命周期或执行初始化逻辑\n */\n activate?(): void | Promise<void>;\n}\n\nexport interface HostManagerOptions {\n hosts: HostAdapterConfig[];\n /**\n * 当未检测到任何宿主标识时的回退逻辑,一般为 startStandaloneApp\n */\n fallback: () => Promise<AppInstance> | Promise<unknown>;\n}\n\nlet microFrontendResolved = false;\n\n/**\n * 根据宿主环境动态选择微前端框架,若未检测到宿主则回退为独立运行模式。\n */\nexport async function initMicroFrontendHosts(options: HostManagerOptions): Promise<void> {\n if (microFrontendResolved) {\n return;\n }\n\n const { hosts, fallback } = options;\n\n for (const host of hosts) {\n if (host.detect()) {\n logger.info(`[mf-runtime] detected micro-frontend host: ${host.name}`);\n\n try {\n await host.activate?.();\n microFrontendResolved = true;\n logger.info(`[mf-runtime] activated micro-frontend host: ${host.name}`);\n return;\n } catch (error) {\n logger.error(`[mf-runtime] failed to activate ${host.name}, trying fallback`, error);\n // 继续尝试下一个宿主或回退到独立模式\n }\n }\n }\n\n // 如果所有宿主激活失败或未检测到任何宿主,调用 fallback\n if (!microFrontendResolved) {\n logger.info('[mf-runtime] fallback to standalone mode');\n await fallback();\n }\n}\n","import logger from '@seed-fe/logger';\nimport type { AdapterOptions, AppInstance } from '../types/base';\nimport type { GarfishDestroyParams, GarfishRenderParams } from '../types/garfish';\n\n/**\n * 创建 Garfish 适配器:\n * - 提供 provider() 给 Garfish 宿主使用\n * - 内部通过 Map<Document, AppInstance> 管理实例,支持多容器挂载\n * - 不关心具体渲染实现细节(React/Vue/纯 DOM 等)\n */\nexport function createGarfishAdapter(options: AdapterOptions) {\n const { initRuntime, renderApp } = options;\n\n const instances = new Map<Document, AppInstance>();\n\n function provider() {\n return {\n render(params: GarfishRenderParams) {\n return initRuntime()\n .then(() => {\n const instance = renderApp({\n container: params.dom,\n props: {\n ...params.props,\n app: params.props?.app,\n },\n });\n instances.set(params.dom, instance);\n logger.info(`[mf-runtime][garfish] rendered successfully: ${params.appName}`);\n })\n .catch((error: Error) => {\n logger.error(`[mf-runtime][garfish] render failed: ${params.appName}`, error);\n // 清理可能的部分状态\n instances.delete(params.dom);\n // 重新抛出,让 Garfish 处理\n throw error;\n });\n },\n destroy(params: GarfishDestroyParams) {\n try {\n const instance = instances.get(params.dom);\n if (instance) {\n instance.unmount();\n }\n instances.delete(params.dom);\n logger.info('[mf-runtime][garfish] destroy completed');\n } catch (error) {\n // 仅记录错误,允许 Garfish 继续清理其他资源\n logger.error('[mf-runtime][garfish] destroy failed', error);\n }\n },\n };\n }\n\n return { provider };\n}\n","import logger from '@seed-fe/logger';\nimport type { AdapterOptions, AppInstance } from '../types/base';\nimport type { QiankunProps } from '../types/qiankun';\n\n/** @deprecated 使用 AdapterOptions 替代 */\nexport type QiankunAdapterOptions = AdapterOptions;\n\n/**\n * 创建 qiankun 适配器:\n * - 提供 bootstrap/mount/unmount 标准生命周期\n * - 内部通过 Map<container, AppInstance> 管理实例,支持多实例挂载\n * - 不关心具体渲染实现细节(React/Vue/纯 DOM 等)\n */\nexport function createQiankunAdapter(options: AdapterOptions) {\n const { initRuntime, renderApp } = options;\n\n const instances = new Map<Element | Document, AppInstance>();\n\n async function bootstrap() {\n try {\n await initRuntime();\n logger.info('[mf-runtime][qiankun] bootstrap completed');\n } catch (error) {\n logger.error('[mf-runtime][qiankun] bootstrap failed', error);\n throw error;\n }\n }\n\n function mount(props: QiankunProps) {\n try {\n const container = props.container ?? document;\n const instance = renderApp({\n container,\n props: {\n ...props,\n app: props.app,\n },\n });\n instances.set(container, instance);\n logger.info('[mf-runtime][qiankun] mount completed');\n } catch (error) {\n logger.error('[mf-runtime][qiankun] mount failed', error);\n throw error;\n }\n }\n\n function unmount(props?: QiankunProps) {\n try {\n const container = props?.container ?? document;\n const instance = instances.get(container);\n instance?.unmount();\n instances.delete(container);\n logger.info('[mf-runtime][qiankun] unmount completed');\n } catch (error) {\n logger.error('[mf-runtime][qiankun] unmount failed', error);\n throw error;\n }\n }\n\n return { bootstrap, mount, unmount };\n}\n","import logger from '@seed-fe/logger';\nimport { createGarfishAdapter } from '../hosts/garfish';\nimport { createQiankunAdapter } from '../hosts/qiankun';\nimport type { AppInstance, InitRuntimeFn, RenderAppFn, StartStandaloneFn } from '../types/base';\nimport type { GarfishExports } from '../types/garfish';\nimport type { QiankunProps } from '../types/qiankun';\nimport type { HostAdapterConfig } from './hostManager';\nimport { initMicroFrontendHosts } from './hostManager';\nimport type { StandaloneOptions } from './standalone';\n\nexport interface MicroAppRuntimeOptions {\n /**\n * 微应用运行时初始化逻辑,由应用侧实现。\n * 典型职责:权限、认证、i18n 等一次性初始化。\n */\n initRuntime: InitRuntimeFn;\n /**\n * 微应用渲染逻辑,由应用侧实现。\n * - 适配层只关心 container / props 约定\n * - 内部可以是 React / Vue / 纯 DOM 等任意实现\n */\n mountApp: RenderAppFn;\n /**\n * 独立运行模式入口,由应用侧实现。\n * - 一般通过 createStandaloneStarter(initRuntime, renderApp) 生成\n * - 适配层只在未检测到任何宿主时调用\n */\n startStandalone: StartStandaloneFn;\n /**\n * 内置宿主框架配置\n *\n * - 默认全部启用(garfish: true, qiankun: true)\n * - 设置为 false 可禁用特定框架\n * - 设置为 {} 等同于全部启用\n *\n * @example\n * ```ts\n * // 默认全部启用\n * createMicroAppRuntime({ initRuntime, mountApp, startStandalone });\n *\n * // 仅启用 garfish\n * createMicroAppRuntime({\n * initRuntime,\n * mountApp,\n * startStandalone,\n * hosts: { garfish: true, qiankun: false },\n * });\n *\n * // 禁用所有内置框架,仅使用 extraHosts\n * createMicroAppRuntime({\n * initRuntime,\n * mountApp,\n * startStandalone,\n * hosts: { garfish: false, qiankun: false },\n * extraHosts: [customHost],\n * });\n * ```\n */\n hosts?: {\n garfish?: boolean;\n qiankun?: boolean;\n };\n /**\n * 额外宿主配置,用于接入其他微前端库\n * - 适合其他团队维护的宿主,仅需在微应用中传入配置即可\n */\n extraHosts?: HostAdapterConfig[];\n}\n\nexport interface MicroAppRuntime {\n /**\n * 独立运行模式入口(直接透传应用侧实现)\n */\n startStandaloneApp: (options?: StandaloneOptions) => Promise<AppInstance>;\n /**\n * qiankun 生命周期适配结果\n * - 需要在微应用中按需导出:export const { bootstrap, mount, unmount } = runtime.qiankun ?? {};\n */\n qiankun?: {\n bootstrap: () => Promise<void>;\n mount: (props: QiankunProps) => void;\n unmount: (props?: QiankunProps) => void;\n };\n}\n\n/**\n * 创建微应用运行时适配:\n * - 接收应用侧的 initRuntime / mountApp / startStandalone\n * - 内部完成 Garfish / qiankun 等宿主的适配与检测\n * - 返回 qiankun 生命周期供微应用按需导出\n *\n * 微应用层只需要:\n * 1. 提供 initRuntime / mountApp / startStandalone\n * 2. 在入口处调用 createMicroAppRuntime(...)\n * 3. 若需要支持 qiankun,再将 runtime.qiankun 的三个生命周期导出\n */\nexport function createMicroAppRuntime(options: MicroAppRuntimeOptions): MicroAppRuntime {\n const { initRuntime, mountApp, startStandalone, hosts, extraHosts } = options;\n\n // 默认全部启用\n const garfishEnabled = hosts?.garfish ?? true;\n const qiankunEnabled = hosts?.qiankun ?? true;\n\n const hostAdapters: HostAdapterConfig[] = [];\n\n // Garfish:通过 __GARFISH__ / __GARFISH_EXPORTS__ 适配 provider\n if (garfishEnabled) {\n const { provider } = createGarfishAdapter({\n initRuntime,\n renderApp: (garfishOptions) =>\n mountApp({\n container: garfishOptions.container,\n props: garfishOptions.props,\n }),\n });\n\n // 宿主模式下:若检测到 Garfish 标识,则立即挂载 provider。\n // 兼容两种注入方式:\n // - 宿主预先创建 __GARFISH_EXPORTS__\n // - 子应用自行创建 __GARFISH_EXPORTS__\n if (typeof window !== 'undefined' && (window as Window & { __GARFISH__?: boolean }).__GARFISH__) {\n const globalWithExports = globalThis as typeof globalThis & { __GARFISH_EXPORTS__?: GarfishExports };\n if (!globalWithExports.__GARFISH_EXPORTS__) {\n globalWithExports.__GARFISH_EXPORTS__ = {} as GarfishExports;\n }\n globalWithExports.__GARFISH_EXPORTS__.provider = provider;\n }\n\n hostAdapters.push({\n name: 'garfish',\n detect: () => Boolean(window.__GARFISH__),\n activate: () => {\n if (typeof __GARFISH_EXPORTS__ !== 'undefined') {\n __GARFISH_EXPORTS__.provider = provider;\n }\n },\n });\n }\n\n // qiankun:返回标准生命周期,由微应用按需导出\n let qiankunRuntime: MicroAppRuntime['qiankun'];\n\n if (qiankunEnabled) {\n const { bootstrap, mount, unmount } = createQiankunAdapter({\n initRuntime,\n renderApp: mountApp,\n });\n\n qiankunRuntime = {\n bootstrap,\n mount,\n unmount,\n };\n\n // 将 qiankun 添加到 hosts 数组用于检测\n // 虽然 qiankun 不需要 activate(宿主会主动调用生命周期),\n // 但仍需要 detect 以防止错误地进入独立运行模式\n hostAdapters.push({\n name: 'qiankun',\n detect: () => Boolean(window.__POWERED_BY_QIANKUN__),\n activate: () => {\n logger.info(`[mf-adapter] qiankun`);\n // qiankun 宿主会主动调用生命周期,无需额外激活\n },\n });\n }\n\n if (extraHosts?.length) {\n hostAdapters.push(...extraHosts);\n }\n\n // 初始化宿主检测 + 独立运行回退\n void initMicroFrontendHosts({\n hosts: hostAdapters,\n fallback: () => startStandalone(),\n });\n\n return {\n startStandaloneApp: startStandalone,\n qiankun: qiankunRuntime,\n };\n}\n","import type { AppInstance, InitRuntimeFn, RenderAppFn, RuntimeProps } from '../types/base';\n\nexport interface StandaloneOptions {\n container?: Document;\n props?: RuntimeProps;\n}\n\nexport interface StandaloneStarterOptions {\n initRuntime: InitRuntimeFn;\n renderApp: RenderAppFn;\n}\n\n/**\n * 创建独立运行模式启动器:\n * - 统一处理非微前端宿主环境下的初始化逻辑\n * - 内部保证单例实例,避免重复挂载\n */\nexport function createStandaloneStarter(options: StandaloneStarterOptions) {\n const { initRuntime, renderApp } = options;\n\n let standaloneInstance: AppInstance | null = null;\n\n return async function startStandaloneApp(customOptions?: StandaloneOptions): Promise<AppInstance> {\n if (standaloneInstance) {\n return standaloneInstance;\n }\n\n await initRuntime();\n\n standaloneInstance = renderApp({\n container: customOptions?.container ?? document,\n props: customOptions?.props,\n });\n\n return standaloneInstance;\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/core/log.ts","../src/core/hostManager.ts","../src/hosts/garfish.ts","../src/hosts/qiankun.ts","../src/core/setup.ts","../src/core/standalone.ts"],"names":["LOG_NAMESPACE","formatLogPrefix","scope","hasActivatedHost","initMicroFrontendHosts","options","hosts","fallback","host","logger","error","createGarfishAdapter","initRuntime","mountApp","instancesByDocument","provider","params","instance","createQiankunAdapter","instancesByContainer","bootstrap","mount","props","container","unmount","createMicroFrontendAdapter","startStandalone","extraHosts","garfishEnabled","qiankunEnabled","hostAdapters","garfishOptions","globalWithExports","qiankunLifecycles","createStandaloneStarter","standaloneInstance","customOptions"],"mappings":"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","file":"index.js","sourcesContent":["export const LOG_NAMESPACE = '@seed-fe/mf-adapters';\n\nexport function formatLogPrefix(scope?: string): string {\n return scope ? `[${LOG_NAMESPACE}][${scope}]` : `[${LOG_NAMESPACE}]`;\n}\n\n","import logger from '@seed-fe/logger';\nimport type { MicroAppInstance } from '../types/base';\nimport { formatLogPrefix } from './log';\n\nexport interface MicroFrontendHostAdapter {\n name: string;\n /**\n * 返回 true 表示当前宿主命中\n */\n detect(): boolean;\n /**\n * 命中宿主后调用,用于注册生命周期或执行初始化逻辑\n */\n activate?(): void | Promise<void>;\n}\n\nexport interface InitMicroFrontendHostsOptions {\n hosts: MicroFrontendHostAdapter[];\n /**\n * 当未检测到任何宿主标识时的回退逻辑,一般为 startStandalone\n */\n fallback: () => Promise<MicroAppInstance> | Promise<unknown>;\n}\n\nlet hasActivatedHost = false;\n\n/**\n * 根据宿主环境动态选择微前端框架,若未检测到宿主则回退为独立运行模式。\n */\nexport async function initMicroFrontendHosts(options: InitMicroFrontendHostsOptions): Promise<void> {\n if (hasActivatedHost) {\n return;\n }\n\n const { hosts, fallback } = options;\n\n for (const host of hosts) {\n if (host.detect()) {\n logger.info(`${formatLogPrefix('host-manager')} detected host: ${host.name}`);\n\n try {\n await host.activate?.();\n hasActivatedHost = true;\n logger.info(`${formatLogPrefix('host-manager')} activated host: ${host.name}`);\n return;\n } catch (error) {\n logger.error(`${formatLogPrefix('host-manager')} failed to activate ${host.name}, trying fallback`, error);\n // 继续尝试下一个宿主或回退到独立模式\n }\n }\n }\n\n // 如果所有宿主激活失败或未检测到任何宿主,调用 fallback\n if (!hasActivatedHost) {\n logger.info(`${formatLogPrefix('host-manager')} fallback to standalone mode`);\n await fallback();\n hasActivatedHost = true;\n }\n}\n","import logger from '@seed-fe/logger';\nimport type { MicroAppHooks, MicroAppInstance } from '../types/base';\nimport type { GarfishDestroyParams, GarfishRenderParams } from '../types/garfish';\nimport { formatLogPrefix } from '../core/log';\n\n/**\n * 创建 Garfish 适配器:\n * - 提供 provider() 给 Garfish 宿主使用\n * - 内部通过 Map<Document, MicroAppInstance> 管理实例,支持多容器挂载\n * - 不关心具体渲染实现细节(React/Vue/纯 DOM 等)\n */\nexport function createGarfishAdapter(options: MicroAppHooks) {\n const { initRuntime, mountApp } = options;\n\n const instancesByDocument = new Map<Document, MicroAppInstance>();\n\n function provider() {\n return {\n render(params: GarfishRenderParams) {\n return initRuntime()\n .then(() => {\n const instance = mountApp({\n container: params.dom,\n props: params.props,\n });\n instancesByDocument.set(params.dom, instance);\n logger.info(`${formatLogPrefix('garfish')} rendered successfully: ${params.appName}`);\n })\n .catch((error: Error) => {\n logger.error(`${formatLogPrefix('garfish')} render failed: ${params.appName}`, error);\n // 清理可能的部分状态\n instancesByDocument.delete(params.dom);\n // 重新抛出,让 Garfish 处理\n throw error;\n });\n },\n destroy(params: GarfishDestroyParams) {\n try {\n const instance = instancesByDocument.get(params.dom);\n if (instance) {\n instance.unmount();\n }\n instancesByDocument.delete(params.dom);\n logger.info(`${formatLogPrefix('garfish')} destroy completed`);\n } catch (error) {\n // 仅记录错误,允许 Garfish 继续清理其他资源\n logger.error(`${formatLogPrefix('garfish')} destroy failed`, error);\n }\n },\n };\n }\n\n return { provider };\n}\n","import logger from '@seed-fe/logger';\nimport type { MicroAppHooks, MicroAppInstance } from '../types/base';\nimport type { QiankunProps } from '../types/qiankun';\nimport { formatLogPrefix } from '../core/log';\n\n/**\n * 创建 qiankun 适配器:\n * - 提供 bootstrap/mount/unmount 标准生命周期\n * - 内部通过 Map<container, MicroAppInstance> 管理实例,支持多实例挂载\n * - 不关心具体渲染实现细节(React/Vue/纯 DOM 等)\n */\nexport function createQiankunAdapter(options: MicroAppHooks) {\n const { initRuntime, mountApp } = options;\n\n const instancesByContainer = new Map<Element | Document, MicroAppInstance>();\n\n async function bootstrap() {\n try {\n await initRuntime();\n logger.info(`${formatLogPrefix('qiankun')} bootstrap completed`);\n } catch (error) {\n logger.error(`${formatLogPrefix('qiankun')} bootstrap failed`, error);\n throw error;\n }\n }\n\n function mount(props: QiankunProps) {\n try {\n const container = props.container ?? document;\n const instance = mountApp({\n container,\n props,\n });\n instancesByContainer.set(container, instance);\n logger.info(`${formatLogPrefix('qiankun')} mount completed`);\n } catch (error) {\n logger.error(`${formatLogPrefix('qiankun')} mount failed`, error);\n throw error;\n }\n }\n\n function unmount(props?: QiankunProps) {\n try {\n const container = props?.container ?? document;\n const instance = instancesByContainer.get(container);\n instance?.unmount();\n instancesByContainer.delete(container);\n logger.info(`${formatLogPrefix('qiankun')} unmount completed`);\n } catch (error) {\n logger.error(`${formatLogPrefix('qiankun')} unmount failed`, error);\n throw error;\n }\n }\n\n return { bootstrap, mount, unmount };\n}\n","import { createGarfishAdapter } from '../hosts/garfish';\nimport { createQiankunAdapter } from '../hosts/qiankun';\nimport type { InitRuntimeFn, MicroAppInstance, MountAppFn, StartStandaloneFn } from '../types/base';\nimport type { GarfishExports } from '../types/garfish';\nimport type { QiankunProps } from '../types/qiankun';\nimport type { MicroFrontendHostAdapter } from './hostManager';\nimport { initMicroFrontendHosts } from './hostManager';\nimport type { StandaloneOptions } from './standalone';\n\nexport interface MicroFrontendAdapterOptions {\n /**\n * 微应用运行时初始化逻辑,由应用侧实现。\n * 典型职责:权限、认证、i18n 等一次性初始化。\n */\n initRuntime: InitRuntimeFn;\n /**\n * 微应用渲染逻辑,由应用侧实现。\n * - 适配层只关心 container / props 约定\n * - 内部可以是 React / Vue / 纯 DOM 等任意实现\n */\n mountApp: MountAppFn;\n /**\n * 独立运行模式入口,由应用侧实现。\n * - 一般通过 createStandaloneStarter({ initRuntime, mountApp }) 生成\n * - 适配层只在未检测到任何宿主时调用\n */\n startStandalone: StartStandaloneFn;\n /**\n * 内置宿主框架配置\n *\n * - 默认全部启用(garfish: true, qiankun: true)\n * - 设置为 false 可禁用特定框架\n * - 设置为 {} 等同于全部启用\n *\n * @example\n * ```ts\n * // 默认全部启用\n * createMicroFrontendAdapter({ initRuntime, mountApp, startStandalone });\n *\n * // 仅启用 garfish\n * createMicroFrontendAdapter({\n * initRuntime,\n * mountApp,\n * startStandalone,\n * hosts: { garfish: true, qiankun: false },\n * });\n *\n * // 禁用所有内置框架,仅使用 extraHosts\n * createMicroFrontendAdapter({\n * initRuntime,\n * mountApp,\n * startStandalone,\n * hosts: { garfish: false, qiankun: false },\n * extraHosts: [customHost],\n * });\n * ```\n */\n hosts?: {\n garfish?: boolean;\n qiankun?: boolean;\n };\n /**\n * 额外宿主配置,用于接入其他微前端库\n * - 适合其他团队维护的宿主,仅需在微应用中传入配置即可\n */\n extraHosts?: MicroFrontendHostAdapter[];\n}\n\nexport interface MicroFrontendAdapter {\n /**\n * 独立运行模式入口(直接透传应用侧实现)\n */\n startStandalone: (options?: StandaloneOptions) => Promise<MicroAppInstance>;\n /**\n * qiankun 生命周期适配结果\n * - 需要在微应用中按需导出:export const { bootstrap, mount, unmount } = runtime.qiankun ?? {};\n */\n qiankun?: {\n bootstrap: () => Promise<void>;\n mount: (props: QiankunProps) => void;\n unmount: (props?: QiankunProps) => void;\n };\n}\n\n/**\n * 创建微前端适配器:\n * - 接收应用侧的 initRuntime / mountApp / startStandalone\n * - 内部完成 Garfish / qiankun 等宿主的适配与检测\n * - 返回 qiankun 生命周期供微应用按需导出\n *\n * 微应用层只需要:\n * 1. 提供 initRuntime / mountApp / startStandalone\n * 2. 在入口处调用 createMicroFrontendAdapter(...)\n * 3. 若需要支持 qiankun,再将 adapter.qiankun 的三个生命周期导出\n */\nexport function createMicroFrontendAdapter(options: MicroFrontendAdapterOptions): MicroFrontendAdapter {\n const { initRuntime, mountApp, startStandalone, hosts, extraHosts } = options;\n\n // 默认全部启用\n const garfishEnabled = hosts?.garfish ?? true;\n const qiankunEnabled = hosts?.qiankun ?? true;\n\n const hostAdapters: MicroFrontendHostAdapter[] = [];\n\n // Garfish:通过 __GARFISH__ / __GARFISH_EXPORTS__ 适配 provider\n if (garfishEnabled) {\n const { provider } = createGarfishAdapter({\n initRuntime,\n mountApp: (garfishOptions) =>\n mountApp({\n container: garfishOptions.container,\n props: garfishOptions.props,\n }),\n });\n\n // 宿主模式下:若检测到 Garfish 标识,则立即挂载 provider。\n // 兼容两种注入方式:\n // - 宿主预先创建 __GARFISH_EXPORTS__\n // - 子应用自行创建 __GARFISH_EXPORTS__\n if (window.__GARFISH__) {\n const globalWithExports = globalThis as typeof globalThis & { __GARFISH_EXPORTS__?: GarfishExports };\n if (!globalWithExports.__GARFISH_EXPORTS__) {\n globalWithExports.__GARFISH_EXPORTS__ = {} as GarfishExports;\n }\n globalWithExports.__GARFISH_EXPORTS__.provider = provider;\n }\n\n hostAdapters.push({\n name: 'garfish',\n detect: () => Boolean(window.__GARFISH__),\n activate: () => {\n if (typeof __GARFISH_EXPORTS__ !== 'undefined') {\n __GARFISH_EXPORTS__.provider = provider;\n }\n },\n });\n }\n\n // qiankun:返回标准生命周期,由微应用按需导出\n let qiankunLifecycles: MicroFrontendAdapter['qiankun'];\n\n if (qiankunEnabled) {\n const { bootstrap, mount, unmount } = createQiankunAdapter({\n initRuntime,\n mountApp,\n });\n\n qiankunLifecycles = {\n bootstrap,\n mount,\n unmount,\n };\n\n // 将 qiankun 添加到 hosts 数组用于检测\n // 虽然 qiankun 不需要 activate(宿主会主动调用生命周期),\n // 但仍需要 detect 以防止错误地进入独立运行模式\n hostAdapters.push({\n name: 'qiankun',\n detect: () => Boolean(window.__POWERED_BY_QIANKUN__),\n });\n }\n\n if (extraHosts?.length) {\n hostAdapters.push(...extraHosts);\n }\n\n // 初始化宿主检测 + 独立运行回退\n void initMicroFrontendHosts({\n hosts: hostAdapters,\n fallback: () => startStandalone(),\n });\n\n return {\n startStandalone,\n qiankun: qiankunLifecycles,\n };\n}\n","import type { InitRuntimeFn, MicroAppInstance, MicroAppRuntimeProps, MountAppFn } from '../types/base';\n\nexport interface StandaloneOptions {\n container?: Element | Document;\n props?: MicroAppRuntimeProps;\n}\n\nexport interface StandaloneStarterOptions {\n initRuntime: InitRuntimeFn;\n mountApp: MountAppFn;\n}\n\n/**\n * 创建独立运行模式启动器:\n * - 统一处理非微前端宿主环境下的初始化逻辑\n * - 内部保证单例实例,避免重复挂载\n */\nexport function createStandaloneStarter(options: StandaloneStarterOptions) {\n const { initRuntime, mountApp } = options;\n\n let standaloneInstance: MicroAppInstance | null = null;\n\n return async function startStandalone(customOptions?: StandaloneOptions): Promise<MicroAppInstance> {\n if (standaloneInstance) {\n return standaloneInstance;\n }\n\n await initRuntime();\n\n standaloneInstance = mountApp({\n container: customOptions?.container ?? document,\n props: customOptions?.props,\n });\n\n return standaloneInstance;\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seed-fe/mf-adapters",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.0.0-alpha.2",
4
4
  "description": "微前端适配工具库,支持 React/Vue/任意框架在 Garfish/qiankun 等宿主中运行",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",