@module-federation/bridge-vue3 0.0.0-next-20240927195332 → 0.0.0-next-20240930091801

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@module-federation/bridge-vue3",
3
3
  "author": "zhouxiao <codingzx@gmail.com>",
4
- "version": "0.0.0-next-20240927195332",
4
+ "version": "0.0.0-next-20240930091801",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -23,10 +23,11 @@
23
23
  ],
24
24
  "peerDependencies": {
25
25
  "vue": "=3",
26
- "vue-router": "=3"
26
+ "vue-router": "=3",
27
+ "@module-federation/runtime": "0.0.0-next-20240930091801"
27
28
  },
28
29
  "dependencies": {
29
- "@module-federation/bridge-shared": "0.0.0-next-20240927195332"
30
+ "@module-federation/bridge-shared": "0.0.0-next-20240930091801"
30
31
  },
31
32
  "devDependencies": {
32
33
  "@vitejs/plugin-vue": "^5.0.4",
package/src/create.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { defineAsyncComponent, h } from 'vue';
2
+ import { useRoute } from 'vue-router';
2
3
  import RemoteApp from './remoteApp.jsx';
3
4
  import { LoggerInstance } from './utils.js';
4
- import { useRoute } from 'vue-router';
5
5
 
6
6
  declare const __APP_VERSION__: string;
7
7
 
@@ -0,0 +1,29 @@
1
+ import { getInstance } from '@module-federation/runtime';
2
+ import helper from '@module-federation/runtime/helpers';
3
+
4
+ function registerBridgeLifeCycle() {
5
+ const { registerPlugins, pluginHelper } = helper.global;
6
+ const host = getInstance();
7
+ const pluginSystem = new pluginHelper.PluginSystem({
8
+ beforeBridgeRender: new pluginHelper.SyncHook<
9
+ [Record<string, any>],
10
+ void
11
+ >(),
12
+ beforeBridgeDestroy: new pluginHelper.SyncHook<
13
+ [Record<string, any>],
14
+ void
15
+ >(),
16
+ });
17
+
18
+ if (host) {
19
+ registerPlugins<typeof pluginSystem.lifecycle, typeof pluginSystem>(
20
+ host?.options?.plugins,
21
+ [pluginSystem],
22
+ );
23
+ return pluginSystem;
24
+ }
25
+
26
+ return null;
27
+ }
28
+
29
+ export { registerBridgeLifeCycle };
package/src/provider.ts CHANGED
@@ -14,6 +14,7 @@ export function createBridgeComponent(bridgeInfo: any) {
14
14
  LoggerInstance.log(`createBridgeComponent render Info`, info);
15
15
  const app = Vue.createApp(bridgeInfo.rootComponent);
16
16
  rootMap.set(info.dom, app);
17
+ bridgeInfo?.renderLifecycle?.(info);
17
18
  const appOptions = bridgeInfo.appOptions({
18
19
  basename: info.basename,
19
20
  memoryRoute: info.memoryRoute,
@@ -46,6 +47,7 @@ export function createBridgeComponent(bridgeInfo: any) {
46
47
  destroy(info: { dom: HTMLElement }) {
47
48
  LoggerInstance.log(`createBridgeComponent destroy Info`, info);
48
49
  const root = rootMap.get(info?.dom);
50
+ bridgeInfo?.destroyLifecycle?.(info);
49
51
  root?.unmount();
50
52
  },
51
53
  };
package/src/remoteApp.tsx CHANGED
@@ -1,7 +1,8 @@
1
1
  import { ref, onMounted, onBeforeUnmount, watch, defineComponent } from 'vue';
2
+ import { dispatchPopstateEnv } from '@module-federation/bridge-shared';
2
3
  import { useRoute } from 'vue-router';
4
+ import { registerBridgeLifeCycle } from './lifecycle';
3
5
  import { LoggerInstance } from './utils';
4
- import { dispatchPopstateEnv } from '@module-federation/bridge-shared';
5
6
 
6
7
  export default defineComponent({
7
8
  name: 'RemoteApp',
@@ -16,6 +17,7 @@ export default defineComponent({
16
17
  const providerInfoRef = ref(null);
17
18
  const pathname = ref('');
18
19
  const route = useRoute();
20
+ const bridgeHook = registerBridgeLifeCycle();
19
21
 
20
22
  const renderComponent = () => {
21
23
  const providerReturn = props.providerInfo?.();
@@ -30,6 +32,12 @@ export default defineComponent({
30
32
  `createRemoteComponent LazyComponent render >>>`,
31
33
  renderProps,
32
34
  );
35
+
36
+ if (bridgeHook && bridgeHook?.lifecycle?.beforeBridgeRender) {
37
+ bridgeHook?.lifecycle?.beforeBridgeRender.emit({
38
+ ...renderProps,
39
+ });
40
+ }
33
41
  providerReturn.render(renderProps);
34
42
  };
35
43
 
@@ -61,6 +69,15 @@ export default defineComponent({
61
69
  ...props,
62
70
  });
63
71
  watchStopHandle();
72
+ if (bridgeHook && bridgeHook?.lifecycle?.beforeBridgeRender) {
73
+ bridgeHook?.lifecycle?.beforeBridgeDestroy.emit({
74
+ name: props.moduleName,
75
+ dom: rootRef.value,
76
+ basename: props.basename,
77
+ memoryRoute: props.memoryRoute,
78
+ });
79
+ }
80
+
64
81
  (providerInfoRef.value as any)?.destroy({ dom: rootRef.value });
65
82
  });
66
83