@module-federation/bridge-vue3 0.7.3 → 0.7.5

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
@@ -7,7 +7,7 @@
7
7
  "url": "https://github.com/module-federation/core",
8
8
  "directory": "packages/vue3-bridge"
9
9
  },
10
- "version": "0.7.3",
10
+ "version": "0.7.5",
11
11
  "publishConfig": {
12
12
  "access": "public"
13
13
  },
@@ -32,8 +32,9 @@
32
32
  "vue-router": "=3"
33
33
  },
34
34
  "dependencies": {
35
- "@module-federation/bridge-shared": "0.7.3",
36
- "@module-federation/sdk": "0.7.3"
35
+ "@module-federation/bridge-shared": "0.7.5",
36
+ "@module-federation/sdk": "0.7.5",
37
+ "@module-federation/runtime": "0.7.5"
37
38
  },
38
39
  "devDependencies": {
39
40
  "@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
 
package/src/provider.ts CHANGED
@@ -2,11 +2,13 @@ import * as Vue from 'vue';
2
2
  import * as VueRouter from 'vue-router';
3
3
  import { RenderFnParams } from '@module-federation/bridge-shared';
4
4
  import { LoggerInstance } from './utils';
5
+ import { getInstance } from '@module-federation/runtime';
5
6
 
6
7
  declare const __APP_VERSION__: string;
7
8
 
8
9
  export function createBridgeComponent(bridgeInfo: any) {
9
10
  const rootMap = new Map();
11
+ const instance = getInstance();
10
12
  return () => {
11
13
  return {
12
14
  __APP_VERSION__,
@@ -14,14 +16,27 @@ export function createBridgeComponent(bridgeInfo: any) {
14
16
  LoggerInstance.log(`createBridgeComponent render Info`, info);
15
17
  const app = Vue.createApp(bridgeInfo.rootComponent);
16
18
  rootMap.set(info.dom, app);
19
+
20
+ const beforeBridgeRenderRes =
21
+ instance?.bridgeHook?.lifecycle?.beforeBridgeRender?.emit(info) || {};
22
+
23
+ const extraProps =
24
+ beforeBridgeRenderRes &&
25
+ typeof beforeBridgeRenderRes === 'object' &&
26
+ beforeBridgeRenderRes?.extraProps
27
+ ? beforeBridgeRenderRes?.extraProps
28
+ : {};
29
+
17
30
  const appOptions = bridgeInfo.appOptions({
18
31
  basename: info.basename,
19
32
  memoryRoute: info.memoryRoute,
33
+ ...extraProps,
20
34
  });
21
35
 
22
36
  const history = info.memoryRoute
23
37
  ? VueRouter.createMemoryHistory(info.basename)
24
38
  : VueRouter.createWebHistory(info.basename);
39
+
25
40
  const router = VueRouter.createRouter({
26
41
  ...appOptions.router.options,
27
42
  history,
@@ -42,11 +57,16 @@ export function createBridgeComponent(bridgeInfo: any) {
42
57
  app.use(router);
43
58
  app.mount(info.dom);
44
59
  }
60
+
61
+ instance?.bridgeHook?.lifecycle?.afterBridgeRender?.emit(info) || {};
45
62
  },
46
63
  destroy(info: { dom: HTMLElement }) {
47
64
  LoggerInstance.log(`createBridgeComponent destroy Info`, info);
48
65
  const root = rootMap.get(info?.dom);
66
+
67
+ instance?.bridgeHook?.lifecycle?.beforeBridgeDestroy?.emit(info);
49
68
  root?.unmount();
69
+ instance?.bridgeHook?.lifecycle?.afterBridgeDestroy?.emit(info);
50
70
  },
51
71
  };
52
72
  };
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';
3
4
  import { LoggerInstance } from './utils';
4
- import { dispatchPopstateEnv } from '@module-federation/bridge-shared';
5
+ import { getInstance } from '@module-federation/runtime';
5
6
 
6
7
  export default defineComponent({
7
8
  name: 'RemoteApp',
@@ -16,11 +17,13 @@ export default defineComponent({
16
17
  const providerInfoRef = ref(null);
17
18
  const pathname = ref('');
18
19
  const route = useRoute();
20
+ const hostInstance = getInstance();
19
21
 
20
22
  const renderComponent = () => {
21
23
  const providerReturn = props.providerInfo?.();
22
24
  providerInfoRef.value = providerReturn;
23
- const renderProps = {
25
+
26
+ let renderProps = {
24
27
  name: props.moduleName,
25
28
  dom: rootRef.value,
26
29
  basename: props.basename,
@@ -30,7 +33,15 @@ export default defineComponent({
30
33
  `createRemoteComponent LazyComponent render >>>`,
31
34
  renderProps,
32
35
  );
36
+
37
+ const beforeBridgeRenderRes =
38
+ hostInstance?.bridgeHook?.lifecycle?.beforeBridgeRender?.emit(
39
+ renderProps,
40
+ ) || {};
41
+
42
+ renderProps = { ...renderProps, ...beforeBridgeRenderRes.extraProps };
33
43
  providerReturn.render(renderProps);
44
+ hostInstance?.bridgeHook?.lifecycle?.afterBridgeRender?.emit(renderProps);
34
45
  };
35
46
 
36
47
  const watchStopHandle = watch(
@@ -61,7 +72,21 @@ export default defineComponent({
61
72
  ...props,
62
73
  });
63
74
  watchStopHandle();
75
+
76
+ hostInstance?.bridgeHook?.lifecycle?.beforeBridgeDestroy?.emit({
77
+ name: props.moduleName,
78
+ dom: rootRef.value,
79
+ basename: props.basename,
80
+ memoryRoute: props.memoryRoute,
81
+ });
82
+
64
83
  (providerInfoRef.value as any)?.destroy({ dom: rootRef.value });
84
+ hostInstance?.bridgeHook?.lifecycle?.afterBridgeDestroy?.emit({
85
+ name: props.moduleName,
86
+ dom: rootRef.value,
87
+ basename: props.basename,
88
+ memoryRoute: props.memoryRoute,
89
+ });
65
90
  });
66
91
 
67
92
  return () => <div ref={rootRef}></div>;