@module-federation/bridge-react 0.0.0-next-20240830065016 → 0.0.0-next-20240902023803

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,6 +1,6 @@
1
1
  {
2
2
  "name": "@module-federation/bridge-react",
3
- "version": "0.0.0-next-20240830065016",
3
+ "version": "0.0.0-next-20240902023803",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -35,13 +35,12 @@
35
35
  "dependencies": {
36
36
  "@loadable/component": "^5.16.4",
37
37
  "react-error-boundary": "^4.0.13",
38
- "@module-federation/bridge-shared": "0.0.0-next-20240830065016"
38
+ "@module-federation/bridge-shared": "0.0.0-next-20240902023803"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "react": ">=16.9.0",
42
42
  "react-dom": ">=16.9.0",
43
- "react-router-dom": ">=4",
44
- "@module-federation/runtime": "0.0.0-next-20240830065016"
43
+ "react-router-dom": ">=4"
45
44
  },
46
45
  "devDependencies": {
47
46
  "@testing-library/react": "15.0.7",
package/src/create.tsx CHANGED
@@ -1,15 +1,12 @@
1
1
  import React, { forwardRef } from 'react';
2
+ import type { ProviderParams } from '@module-federation/bridge-shared';
3
+ import { LoggerInstance } from './utils';
2
4
  import {
3
5
  ErrorBoundary,
4
6
  ErrorBoundaryPropsWithComponent,
5
7
  } from 'react-error-boundary';
6
-
7
- import hook from './lifecycle';
8
- import { LoggerInstance } from './utils';
9
8
  import RemoteApp from './remote';
10
9
 
11
- import type { ProviderParams } from '@module-federation/bridge-shared';
12
-
13
10
  export interface RenderFnParams extends ProviderParams {
14
11
  dom?: any;
15
12
  }
@@ -36,7 +33,6 @@ function createLazyRemoteComponent<T, E extends keyof T>(info: {
36
33
 
37
34
  try {
38
35
  const m = (await info.loader()) as RemoteModule;
39
- await hook.lifecycle.beforeBridgeRender.emit({});
40
36
  // @ts-ignore
41
37
  const moduleName = m && m[Symbol.for('mf_module_id')];
42
38
  LoggerInstance.log(
package/src/provider.tsx CHANGED
@@ -2,19 +2,14 @@ import { useLayoutEffect, useRef, useState } from 'react';
2
2
  import * as React from 'react';
3
3
  import ReactDOM from 'react-dom';
4
4
  import ReactDOMClient from 'react-dom/client';
5
+ import { RouterContext } from './context';
5
6
  import type {
6
7
  ProviderParams,
7
8
  RenderFnParams,
8
9
  } from '@module-federation/bridge-shared';
9
- import { ErrorBoundary } from 'react-error-boundary';
10
-
11
- import { RouterContext } from './context';
12
10
  import { LoggerInstance, atLeastReact18 } from './utils';
11
+ import { ErrorBoundary } from 'react-error-boundary';
13
12
 
14
- type RenderParams = RenderFnParams & any;
15
- type DestroyParams = {
16
- dom: HTMLElement;
17
- };
18
13
  type RootType = HTMLElement | ReactDOMClient.Root;
19
14
  type ProviderFnParams<T> = {
20
15
  rootComponent: React.ComponentType<T>;
@@ -22,11 +17,8 @@ type ProviderFnParams<T> = {
22
17
  App: React.ReactElement,
23
18
  id?: HTMLElement | string,
24
19
  ) => RootType | Promise<RootType>;
25
- beforeRender?: (params: RenderFnParams) => void;
26
- afterRender?: (params: RenderFnParams) => void;
27
- beforeDestroy?: (params: DestroyParams) => void;
28
- afterDestroy?: (params: DestroyParams) => void;
29
20
  };
21
+
30
22
  export function createBridgeComponent<T>(bridgeInfo: ProviderFnParams<T>) {
31
23
  return () => {
32
24
  const rootMap = new Map<any, RootType>();
@@ -45,7 +37,7 @@ export function createBridgeComponent<T>(bridgeInfo: ProviderFnParams<T>) {
45
37
  };
46
38
 
47
39
  return {
48
- async render(info: RenderParams) {
40
+ async render(info: RenderFnParams & any) {
49
41
  LoggerInstance.log(`createBridgeComponent render Info`, info);
50
42
  const {
51
43
  moduleName,
@@ -69,7 +61,6 @@ export function createBridgeComponent<T>(bridgeInfo: ProviderFnParams<T>) {
69
61
  </ErrorBoundary>
70
62
  );
71
63
 
72
- bridgeInfo?.beforeRender?.(info);
73
64
  if (atLeastReact18(React)) {
74
65
  if (bridgeInfo?.render) {
75
66
  // in case bridgeInfo?.render is an async function, resolve this to promise
@@ -86,10 +77,8 @@ export function createBridgeComponent<T>(bridgeInfo: ProviderFnParams<T>) {
86
77
  const renderFn = bridgeInfo?.render || ReactDOM.render;
87
78
  renderFn?.(rootComponentWithErrorBoundary, info.dom);
88
79
  }
89
- bridgeInfo?.afterRender?.(info);
90
80
  },
91
- async destroy(info: DestroyParams) {
92
- bridgeInfo?.beforeDestroy?.(info);
81
+ async destroy(info: { dom: HTMLElement }) {
93
82
  LoggerInstance.log(`createBridgeComponent destroy Info`, {
94
83
  dom: info.dom,
95
84
  });
@@ -100,7 +89,6 @@ export function createBridgeComponent<T>(bridgeInfo: ProviderFnParams<T>) {
100
89
  } else {
101
90
  ReactDOM.unmountComponentAtNode(info.dom);
102
91
  }
103
- bridgeInfo?.afterDestroy?.(info);
104
92
  },
105
93
  rawComponent: bridgeInfo.rootComponent,
106
94
  __BRIDGE_FN__: (_args: T) => {},
@@ -7,12 +7,10 @@ import React, {
7
7
  } from 'react';
8
8
  import * as ReactRouterDOM from 'react-router-dom';
9
9
  import type { ProviderParams } from '@module-federation/bridge-shared';
10
+ import { LoggerInstance, pathJoin } from '../utils';
10
11
  import { dispatchPopstateEnv } from '@module-federation/bridge-shared';
11
12
  import { ErrorBoundaryPropsWithComponent } from 'react-error-boundary';
12
13
 
13
- import hook from '../lifecycle';
14
- import { LoggerInstance, pathJoin } from '../utils';
15
-
16
14
  declare const __APP_VERSION__: string;
17
15
  export interface RenderFnParams extends ProviderParams {
18
16
  dom?: any;
@@ -62,11 +60,6 @@ const RemoteAppWrapper = forwardRef(function (
62
60
  const renderDom: React.MutableRefObject<HTMLElement | null> = useRef(null);
63
61
  const providerInfoRef = useRef<any>(null);
64
62
 
65
- useEffect(() => {
66
- (async () => {
67
- await hook.lifecycle.afterBridgeRender.emit({});
68
- })();
69
- }, []);
70
63
  useEffect(() => {
71
64
  const renderTimeout = setTimeout(() => {
72
65
  const providerReturn = providerInfo();
@@ -89,22 +82,18 @@ const RemoteAppWrapper = forwardRef(function (
89
82
  });
90
83
 
91
84
  return () => {
92
- (async () => {
93
- await hook.lifecycle.beforeBridgeDestroy.emit({});
94
- clearTimeout(renderTimeout);
95
- setTimeout(async () => {
96
- if (providerInfoRef.current?.destroy) {
97
- LoggerInstance.log(
98
- `createRemoteComponent LazyComponent destroy >>>`,
99
- { moduleName, basename, dom: renderDom.current },
100
- );
101
- providerInfoRef.current?.destroy({
102
- dom: renderDom.current,
103
- });
104
- await hook.lifecycle.afterBridgeDestroy.emit({});
105
- }
106
- });
107
- })();
85
+ clearTimeout(renderTimeout);
86
+ setTimeout(() => {
87
+ if (providerInfoRef.current?.destroy) {
88
+ LoggerInstance.log(
89
+ `createRemoteComponent LazyComponent destroy >>>`,
90
+ { moduleName, basename, dom: renderDom.current },
91
+ );
92
+ providerInfoRef.current?.destroy({
93
+ dom: renderDom.current,
94
+ });
95
+ }
96
+ });
108
97
  };
109
98
  }, []);
110
99
 
package/src/lifecycle.ts DELETED
@@ -1,21 +0,0 @@
1
- import { getInstance } from '@module-federation/runtime';
2
- import helper from '@module-federation/runtime/helpers';
3
-
4
- const registerPlugin = helper.global.registerPlugins;
5
- const pluginHelper = helper.global.pluginHelper;
6
- const host = getInstance()!;
7
- const pluginSystem = new pluginHelper.PluginSystem({
8
- beforeBridgeRender: new pluginHelper.AsyncWaterfallHook('beforeBridgeRender'),
9
- afterBridgeRender: new pluginHelper.AsyncWaterfallHook('afterBridgeRender'),
10
- beforeBridgeDestroy: new pluginHelper.AsyncWaterfallHook(
11
- 'beforeBridgeDestroy',
12
- ),
13
- afterBridgeDestroy: new pluginHelper.AsyncWaterfallHook('afterBridgeDestroy'),
14
- });
15
-
16
- registerPlugin<typeof pluginSystem.lifecycle, typeof pluginSystem>(
17
- host.options.plugins,
18
- [pluginSystem],
19
- );
20
-
21
- export default pluginSystem;