@module-federation/bridge-react 0.0.0-next-20241108091829 → 0.0.0-next-20241112032845
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -7
- package/dist/{context-DmzxwI_7.cjs → context-BBLu8BlQ.cjs} +0 -19
- package/dist/{context-Dh6IUBWT.js → context-BcyT-d0V.js} +1 -20
- package/dist/index.cjs.js +8 -54
- package/dist/index.d.ts +5 -20
- package/dist/index.es.js +8 -54
- package/dist/router-v5.cjs.js +1 -1
- package/dist/router-v5.es.js +1 -1
- package/dist/router-v6.cjs.js +1 -1
- package/dist/router-v6.es.js +1 -1
- package/dist/router.cjs.js +2 -2
- package/dist/router.es.js +2 -2
- package/package.json +4 -5
- package/src/create.tsx +2 -2
- package/src/provider.tsx +8 -53
- package/src/remote/index.tsx +3 -33
- package/src/router-v5.tsx +1 -0
- package/src/router.tsx +1 -1
- package/src/utils.ts +0 -21
package/CHANGELOG.md
CHANGED
|
@@ -1,16 +1,26 @@
|
|
|
1
1
|
# @module-federation/bridge-react
|
|
2
2
|
|
|
3
|
-
## 0.0.0-next-
|
|
3
|
+
## 0.0.0-next-20241112032845
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- @module-federation/sdk@0.0.0-next-20241112032845
|
|
8
|
+
- @module-federation/bridge-shared@0.0.0-next-20241112032845
|
|
9
|
+
|
|
10
|
+
## 0.7.2
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- @module-federation/sdk@0.7.2
|
|
15
|
+
- @module-federation/bridge-shared@0.7.2
|
|
16
|
+
|
|
17
|
+
## 0.7.1
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
6
20
|
|
|
7
|
-
- 3082116: feat: feat: support lifecycyle hooks in module-deferation bridge
|
|
8
|
-
- Updated dependencies [8712967]
|
|
9
21
|
- Updated dependencies [6db4c5f]
|
|
10
|
-
-
|
|
11
|
-
- @module-federation/
|
|
12
|
-
- @module-federation/sdk@0.0.0-next-20241108091829
|
|
13
|
-
- @module-federation/bridge-shared@0.0.0-next-20241108091829
|
|
22
|
+
- @module-federation/sdk@0.7.1
|
|
23
|
+
- @module-federation/bridge-shared@0.7.1
|
|
14
24
|
|
|
15
25
|
## 0.7.0
|
|
16
26
|
|
|
@@ -329,27 +329,8 @@ function pathJoin(...args) {
|
|
|
329
329
|
}, "");
|
|
330
330
|
return res || "/";
|
|
331
331
|
}
|
|
332
|
-
const getModuleName = (id) => {
|
|
333
|
-
if (!id) {
|
|
334
|
-
return id;
|
|
335
|
-
}
|
|
336
|
-
const idArray = id.split("/");
|
|
337
|
-
if (idArray.length < 2) {
|
|
338
|
-
return id;
|
|
339
|
-
}
|
|
340
|
-
return idArray[0] + "/" + idArray[1];
|
|
341
|
-
};
|
|
342
|
-
const getRootDomDefaultClassName = (moduleName) => {
|
|
343
|
-
if (!moduleName) {
|
|
344
|
-
return "";
|
|
345
|
-
}
|
|
346
|
-
const name = getModuleName(moduleName).replace(/\@/, "").replace(/\//, "-");
|
|
347
|
-
return `bridge-root-component-${name}`;
|
|
348
|
-
};
|
|
349
332
|
const RouterContext = React.createContext(null);
|
|
350
333
|
exports.LoggerInstance = LoggerInstance;
|
|
351
334
|
exports.RouterContext = RouterContext;
|
|
352
335
|
exports.atLeastReact18 = atLeastReact18;
|
|
353
|
-
exports.getModuleName = getModuleName;
|
|
354
|
-
exports.getRootDomDefaultClassName = getRootDomDefaultClassName;
|
|
355
336
|
exports.pathJoin = pathJoin;
|
|
@@ -328,29 +328,10 @@ function pathJoin(...args) {
|
|
|
328
328
|
}, "");
|
|
329
329
|
return res || "/";
|
|
330
330
|
}
|
|
331
|
-
const getModuleName = (id) => {
|
|
332
|
-
if (!id) {
|
|
333
|
-
return id;
|
|
334
|
-
}
|
|
335
|
-
const idArray = id.split("/");
|
|
336
|
-
if (idArray.length < 2) {
|
|
337
|
-
return id;
|
|
338
|
-
}
|
|
339
|
-
return idArray[0] + "/" + idArray[1];
|
|
340
|
-
};
|
|
341
|
-
const getRootDomDefaultClassName = (moduleName) => {
|
|
342
|
-
if (!moduleName) {
|
|
343
|
-
return "";
|
|
344
|
-
}
|
|
345
|
-
const name = getModuleName(moduleName).replace(/\@/, "").replace(/\//, "-");
|
|
346
|
-
return `bridge-root-component-${name}`;
|
|
347
|
-
};
|
|
348
331
|
const RouterContext = React__default.createContext(null);
|
|
349
332
|
export {
|
|
350
333
|
LoggerInstance as L,
|
|
351
334
|
RouterContext as R,
|
|
352
|
-
|
|
353
|
-
atLeastReact18 as b,
|
|
354
|
-
getRootDomDefaultClassName as g,
|
|
335
|
+
atLeastReact18 as a,
|
|
355
336
|
pathJoin as p
|
|
356
337
|
};
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const React = require("react");
|
|
4
|
-
const context = require("./context-
|
|
4
|
+
const context = require("./context-BBLu8BlQ.cjs");
|
|
5
5
|
const ReactRouterDOM = require("react-router-dom");
|
|
6
|
-
const runtime = require("@module-federation/runtime");
|
|
7
6
|
const ReactDOM = require("react-dom");
|
|
8
7
|
function _interopNamespaceDefault(e2) {
|
|
9
8
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
@@ -123,8 +122,6 @@ function e() {
|
|
|
123
122
|
window.dispatchEvent(t);
|
|
124
123
|
}
|
|
125
124
|
const RemoteAppWrapper = React.forwardRef(function(props, ref) {
|
|
126
|
-
const host = runtime.getInstance();
|
|
127
|
-
context.LoggerInstance.log(`RemoteAppWrapper host >>>`, host);
|
|
128
125
|
const RemoteApp2 = () => {
|
|
129
126
|
context.LoggerInstance.log(`RemoteAppWrapper RemoteApp props >>>`, { props });
|
|
130
127
|
const {
|
|
@@ -142,10 +139,9 @@ const RemoteAppWrapper = React.forwardRef(function(props, ref) {
|
|
|
142
139
|
const providerInfoRef = React.useRef(null);
|
|
143
140
|
React.useEffect(() => {
|
|
144
141
|
const renderTimeout = setTimeout(() => {
|
|
145
|
-
var _a, _b, _c, _d, _e, _f;
|
|
146
142
|
const providerReturn = providerInfo();
|
|
147
143
|
providerInfoRef.current = providerReturn;
|
|
148
|
-
|
|
144
|
+
const renderProps = {
|
|
149
145
|
moduleName,
|
|
150
146
|
dom: rootRef.current,
|
|
151
147
|
basename,
|
|
@@ -158,55 +154,34 @@ const RemoteAppWrapper = React.forwardRef(function(props, ref) {
|
|
|
158
154
|
`createRemoteComponent LazyComponent render >>>`,
|
|
159
155
|
renderProps
|
|
160
156
|
);
|
|
161
|
-
const beforeBridgeRenderRes = ((_c = (_b = (_a = host == null ? void 0 : host.bridgeHook) == null ? void 0 : _a.lifecycle) == null ? void 0 : _b.beforeBridgeRender) == null ? void 0 : _c.emit(renderProps)) || {};
|
|
162
|
-
renderProps = { ...renderProps, ...beforeBridgeRenderRes.extraProps };
|
|
163
157
|
providerReturn.render(renderProps);
|
|
164
|
-
(_f = (_e = (_d = host == null ? void 0 : host.bridgeHook) == null ? void 0 : _d.lifecycle) == null ? void 0 : _e.afterBridgeRender) == null ? void 0 : _f.emit(renderProps);
|
|
165
158
|
});
|
|
166
159
|
return () => {
|
|
167
160
|
clearTimeout(renderTimeout);
|
|
168
161
|
setTimeout(() => {
|
|
169
|
-
var _a, _b
|
|
162
|
+
var _a, _b;
|
|
170
163
|
if ((_a = providerInfoRef.current) == null ? void 0 : _a.destroy) {
|
|
171
164
|
context.LoggerInstance.log(
|
|
172
165
|
`createRemoteComponent LazyComponent destroy >>>`,
|
|
173
166
|
{ moduleName, basename, dom: renderDom.current }
|
|
174
167
|
);
|
|
175
|
-
(
|
|
176
|
-
moduleName,
|
|
177
|
-
dom: renderDom.current,
|
|
178
|
-
basename,
|
|
179
|
-
memoryRoute,
|
|
180
|
-
fallback,
|
|
181
|
-
...resProps
|
|
182
|
-
});
|
|
183
|
-
(_e = providerInfoRef.current) == null ? void 0 : _e.destroy({
|
|
184
|
-
moduleName,
|
|
168
|
+
(_b = providerInfoRef.current) == null ? void 0 : _b.destroy({
|
|
185
169
|
dom: renderDom.current
|
|
186
170
|
});
|
|
187
|
-
(_h = (_g = (_f = host == null ? void 0 : host.bridgeHook) == null ? void 0 : _f.lifecycle) == null ? void 0 : _g.afterBridgeDestroy) == null ? void 0 : _h.emit({
|
|
188
|
-
moduleName,
|
|
189
|
-
dom: renderDom.current,
|
|
190
|
-
basename,
|
|
191
|
-
memoryRoute,
|
|
192
|
-
fallback,
|
|
193
|
-
...resProps
|
|
194
|
-
});
|
|
195
171
|
}
|
|
196
172
|
});
|
|
197
173
|
};
|
|
198
174
|
}, []);
|
|
199
|
-
const rootComponentClassName = `${context.getRootDomDefaultClassName(moduleName)} ${props == null ? void 0 : props.className}`;
|
|
200
175
|
return /* @__PURE__ */ React.createElement(
|
|
201
176
|
"div",
|
|
202
177
|
{
|
|
203
|
-
className:
|
|
178
|
+
className: props == null ? void 0 : props.className,
|
|
204
179
|
style: props == null ? void 0 : props.style,
|
|
205
180
|
ref: rootRef
|
|
206
181
|
}
|
|
207
182
|
);
|
|
208
183
|
};
|
|
209
|
-
RemoteApp2["__APP_VERSION__"] = "0.7.
|
|
184
|
+
RemoteApp2["__APP_VERSION__"] = "0.7.2";
|
|
210
185
|
return /* @__PURE__ */ React.createElement(RemoteApp2, null);
|
|
211
186
|
});
|
|
212
187
|
function withRouterData(WrappedComponent) {
|
|
@@ -356,7 +331,7 @@ if (process.env.NODE_ENV === "production") {
|
|
|
356
331
|
};
|
|
357
332
|
}
|
|
358
333
|
function createBridgeComponent(bridgeInfo) {
|
|
359
|
-
return (
|
|
334
|
+
return () => {
|
|
360
335
|
const rootMap = /* @__PURE__ */ new Map();
|
|
361
336
|
const RawComponent = (info) => {
|
|
362
337
|
const { appInfo, propsInfo, ...restProps } = info;
|
|
@@ -372,7 +347,6 @@ function createBridgeComponent(bridgeInfo) {
|
|
|
372
347
|
};
|
|
373
348
|
return {
|
|
374
349
|
async render(info) {
|
|
375
|
-
var _a, _b, _c, _d;
|
|
376
350
|
context.LoggerInstance.log(`createBridgeComponent render Info`, info);
|
|
377
351
|
const {
|
|
378
352
|
moduleName,
|
|
@@ -382,12 +356,6 @@ function createBridgeComponent(bridgeInfo) {
|
|
|
382
356
|
fallback,
|
|
383
357
|
...propsInfo
|
|
384
358
|
} = info;
|
|
385
|
-
const moduleNameWithoutExpose = context.getModuleName(moduleName);
|
|
386
|
-
const instance = __FEDERATION__.__INSTANCES__.find(
|
|
387
|
-
(v) => v.name === moduleNameWithoutExpose
|
|
388
|
-
);
|
|
389
|
-
context.LoggerInstance.log(`createBridgeComponent remote instance`, instance);
|
|
390
|
-
const beforeBridgeRenderRes = ((_c = (_b = (_a = instance == null ? void 0 : instance.bridgeHook) == null ? void 0 : _a.lifecycle) == null ? void 0 : _b.beforeBridgeRender) == null ? void 0 : _c.emit(info)) || {};
|
|
391
359
|
const rootComponentWithErrorBoundary = (
|
|
392
360
|
// set ErrorBoundary for RawComponent rendering error, usually caused by user app rendering error
|
|
393
361
|
/* @__PURE__ */ React__namespace.createElement(ErrorBoundary, { FallbackComponent: fallback }, /* @__PURE__ */ React__namespace.createElement(
|
|
@@ -398,7 +366,7 @@ function createBridgeComponent(bridgeInfo) {
|
|
|
398
366
|
basename,
|
|
399
367
|
memoryRoute
|
|
400
368
|
},
|
|
401
|
-
propsInfo
|
|
369
|
+
propsInfo
|
|
402
370
|
}
|
|
403
371
|
))
|
|
404
372
|
);
|
|
@@ -416,24 +384,11 @@ function createBridgeComponent(bridgeInfo) {
|
|
|
416
384
|
const renderFn = (bridgeInfo == null ? void 0 : bridgeInfo.render) || ReactDOM.render;
|
|
417
385
|
renderFn == null ? void 0 : renderFn(rootComponentWithErrorBoundary, info.dom);
|
|
418
386
|
}
|
|
419
|
-
const afterBridgeRender = (bridgeInfo == null ? void 0 : bridgeInfo.hooks) && (bridgeInfo == null ? void 0 : bridgeInfo.hooks.afterBridgeDestroy) || ((_d = params == null ? void 0 : params.hooks) == null ? void 0 : _d.afterBridgeRender);
|
|
420
|
-
afterBridgeRender && afterBridgeRender(info);
|
|
421
387
|
},
|
|
422
388
|
async destroy(info) {
|
|
423
|
-
var _a, _b, _c, _d, _e, _f;
|
|
424
389
|
context.LoggerInstance.log(`createBridgeComponent destroy Info`, {
|
|
425
390
|
dom: info.dom
|
|
426
391
|
});
|
|
427
|
-
const moduleNameWithoutExpose = context.getModuleName(info.moduleName);
|
|
428
|
-
context.LoggerInstance.log(
|
|
429
|
-
`createBridgeComponent remote module without expose name >>>`,
|
|
430
|
-
moduleNameWithoutExpose
|
|
431
|
-
);
|
|
432
|
-
const instance = __FEDERATION__.__INSTANCES__.find(
|
|
433
|
-
(v) => v.name === moduleNameWithoutExpose
|
|
434
|
-
);
|
|
435
|
-
context.LoggerInstance.log(`createBridgeComponent remote instance`, instance);
|
|
436
|
-
(_c = (_b = (_a = instance == null ? void 0 : instance.bridgeHook) == null ? void 0 : _a.lifecycle) == null ? void 0 : _b.beforeBridgeDestroy) == null ? void 0 : _c.emit(info);
|
|
437
392
|
if (context.atLeastReact18(React__namespace)) {
|
|
438
393
|
const root = rootMap.get(info.dom);
|
|
439
394
|
root == null ? void 0 : root.unmount();
|
|
@@ -441,7 +396,6 @@ function createBridgeComponent(bridgeInfo) {
|
|
|
441
396
|
} else {
|
|
442
397
|
ReactDOM.unmountComponentAtNode(info.dom);
|
|
443
398
|
}
|
|
444
|
-
(_f = (_e = (_d = instance == null ? void 0 : instance.bridgeHook) == null ? void 0 : _d.lifecycle) == null ? void 0 : _e.afterBridgeDestroy) == null ? void 0 : _f.emit(info);
|
|
445
399
|
},
|
|
446
400
|
rawComponent: bridgeInfo.rootComponent,
|
|
447
401
|
__BRIDGE_FN__: (_args) => {
|
package/dist/index.d.ts
CHANGED
|
@@ -5,18 +5,11 @@ import { ErrorInfo } from 'react';
|
|
|
5
5
|
import { PropsWithChildren } from 'react';
|
|
6
6
|
import * as React_2 from 'react';
|
|
7
7
|
|
|
8
|
-
declare
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export declare function createBridgeComponent<T>(bridgeInfo: ProviderFnParams<T>): (params?: {
|
|
16
|
-
hooks?: BridgeHooks;
|
|
17
|
-
}) => {
|
|
18
|
-
render(info: RenderParams): Promise<void>;
|
|
19
|
-
destroy(info: DestroyParams): Promise<void>;
|
|
8
|
+
export declare function createBridgeComponent<T>(bridgeInfo: ProviderFnParams<T>): () => {
|
|
9
|
+
render(info: RenderFnParams & any): Promise<void>;
|
|
10
|
+
destroy(info: {
|
|
11
|
+
dom: HTMLElement;
|
|
12
|
+
}): Promise<void>;
|
|
20
13
|
rawComponent: React_2.ComponentType<T>;
|
|
21
14
|
__BRIDGE_FN__: (_args: T) => void;
|
|
22
15
|
};
|
|
@@ -28,11 +21,6 @@ export declare function createRemoteComponent<T, E extends keyof T>(info: {
|
|
|
28
21
|
export?: E;
|
|
29
22
|
}): default_2.ForwardRefExoticComponent<default_2.PropsWithoutRef<ProviderParams & ("__BRIDGE_FN__" extends keyof (T[E] extends (...args: any) => any ? ReturnType<T[E]> : never) ? (T[E] extends (...args: any) => any ? ReturnType<T[E]> : never)["__BRIDGE_FN__"] extends (...args: any) => any ? Parameters<(T[E] extends (...args: any) => any ? ReturnType<T[E]> : never)["__BRIDGE_FN__"]>[0] : {} : {})> & default_2.RefAttributes<HTMLDivElement>>;
|
|
30
23
|
|
|
31
|
-
declare type DestroyParams = {
|
|
32
|
-
moduleName: string;
|
|
33
|
-
dom: HTMLElement;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
24
|
declare type ErrorBoundaryPropsWithComponent = ErrorBoundarySharedProps & {
|
|
37
25
|
fallback?: never;
|
|
38
26
|
FallbackComponent: ComponentType<FallbackProps>;
|
|
@@ -60,7 +48,6 @@ declare type FallbackProps = {
|
|
|
60
48
|
declare type ProviderFnParams<T> = {
|
|
61
49
|
rootComponent: React_2.ComponentType<T>;
|
|
62
50
|
render?: (App: React_2.ReactElement, id?: HTMLElement | string) => RootType | Promise<RootType>;
|
|
63
|
-
hooks?: BridgeHooks;
|
|
64
51
|
};
|
|
65
52
|
|
|
66
53
|
export declare interface ProviderParams {
|
|
@@ -77,8 +64,6 @@ export declare interface RenderFnParams extends ProviderParams {
|
|
|
77
64
|
dom: HTMLElement;
|
|
78
65
|
}
|
|
79
66
|
|
|
80
|
-
declare type RenderParams = RenderFnParams & any;
|
|
81
|
-
|
|
82
67
|
declare type RootType = HTMLElement | default_3.Root;
|
|
83
68
|
|
|
84
69
|
export { }
|
package/dist/index.es.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import React__default, { createContext, Component, createElement, isValidElement, forwardRef, useRef, useEffect, useContext, useState } from "react";
|
|
3
|
-
import { L as LoggerInstance,
|
|
3
|
+
import { L as LoggerInstance, p as pathJoin, a as atLeastReact18, R as RouterContext } from "./context-BcyT-d0V.js";
|
|
4
4
|
import * as ReactRouterDOM from "react-router-dom";
|
|
5
|
-
import { getInstance } from "@module-federation/runtime";
|
|
6
5
|
import ReactDOM from "react-dom";
|
|
7
6
|
const ErrorBoundaryContext = createContext(null);
|
|
8
7
|
const initialState = {
|
|
@@ -104,8 +103,6 @@ function e() {
|
|
|
104
103
|
window.dispatchEvent(t);
|
|
105
104
|
}
|
|
106
105
|
const RemoteAppWrapper = forwardRef(function(props, ref) {
|
|
107
|
-
const host = getInstance();
|
|
108
|
-
LoggerInstance.log(`RemoteAppWrapper host >>>`, host);
|
|
109
106
|
const RemoteApp2 = () => {
|
|
110
107
|
LoggerInstance.log(`RemoteAppWrapper RemoteApp props >>>`, { props });
|
|
111
108
|
const {
|
|
@@ -123,10 +120,9 @@ const RemoteAppWrapper = forwardRef(function(props, ref) {
|
|
|
123
120
|
const providerInfoRef = useRef(null);
|
|
124
121
|
useEffect(() => {
|
|
125
122
|
const renderTimeout = setTimeout(() => {
|
|
126
|
-
var _a, _b, _c, _d, _e, _f;
|
|
127
123
|
const providerReturn = providerInfo();
|
|
128
124
|
providerInfoRef.current = providerReturn;
|
|
129
|
-
|
|
125
|
+
const renderProps = {
|
|
130
126
|
moduleName,
|
|
131
127
|
dom: rootRef.current,
|
|
132
128
|
basename,
|
|
@@ -139,55 +135,34 @@ const RemoteAppWrapper = forwardRef(function(props, ref) {
|
|
|
139
135
|
`createRemoteComponent LazyComponent render >>>`,
|
|
140
136
|
renderProps
|
|
141
137
|
);
|
|
142
|
-
const beforeBridgeRenderRes = ((_c = (_b = (_a = host == null ? void 0 : host.bridgeHook) == null ? void 0 : _a.lifecycle) == null ? void 0 : _b.beforeBridgeRender) == null ? void 0 : _c.emit(renderProps)) || {};
|
|
143
|
-
renderProps = { ...renderProps, ...beforeBridgeRenderRes.extraProps };
|
|
144
138
|
providerReturn.render(renderProps);
|
|
145
|
-
(_f = (_e = (_d = host == null ? void 0 : host.bridgeHook) == null ? void 0 : _d.lifecycle) == null ? void 0 : _e.afterBridgeRender) == null ? void 0 : _f.emit(renderProps);
|
|
146
139
|
});
|
|
147
140
|
return () => {
|
|
148
141
|
clearTimeout(renderTimeout);
|
|
149
142
|
setTimeout(() => {
|
|
150
|
-
var _a, _b
|
|
143
|
+
var _a, _b;
|
|
151
144
|
if ((_a = providerInfoRef.current) == null ? void 0 : _a.destroy) {
|
|
152
145
|
LoggerInstance.log(
|
|
153
146
|
`createRemoteComponent LazyComponent destroy >>>`,
|
|
154
147
|
{ moduleName, basename, dom: renderDom.current }
|
|
155
148
|
);
|
|
156
|
-
(
|
|
157
|
-
moduleName,
|
|
158
|
-
dom: renderDom.current,
|
|
159
|
-
basename,
|
|
160
|
-
memoryRoute,
|
|
161
|
-
fallback,
|
|
162
|
-
...resProps
|
|
163
|
-
});
|
|
164
|
-
(_e = providerInfoRef.current) == null ? void 0 : _e.destroy({
|
|
165
|
-
moduleName,
|
|
149
|
+
(_b = providerInfoRef.current) == null ? void 0 : _b.destroy({
|
|
166
150
|
dom: renderDom.current
|
|
167
151
|
});
|
|
168
|
-
(_h = (_g = (_f = host == null ? void 0 : host.bridgeHook) == null ? void 0 : _f.lifecycle) == null ? void 0 : _g.afterBridgeDestroy) == null ? void 0 : _h.emit({
|
|
169
|
-
moduleName,
|
|
170
|
-
dom: renderDom.current,
|
|
171
|
-
basename,
|
|
172
|
-
memoryRoute,
|
|
173
|
-
fallback,
|
|
174
|
-
...resProps
|
|
175
|
-
});
|
|
176
152
|
}
|
|
177
153
|
});
|
|
178
154
|
};
|
|
179
155
|
}, []);
|
|
180
|
-
const rootComponentClassName = `${getRootDomDefaultClassName(moduleName)} ${props == null ? void 0 : props.className}`;
|
|
181
156
|
return /* @__PURE__ */ React__default.createElement(
|
|
182
157
|
"div",
|
|
183
158
|
{
|
|
184
|
-
className:
|
|
159
|
+
className: props == null ? void 0 : props.className,
|
|
185
160
|
style: props == null ? void 0 : props.style,
|
|
186
161
|
ref: rootRef
|
|
187
162
|
}
|
|
188
163
|
);
|
|
189
164
|
};
|
|
190
|
-
RemoteApp2["__APP_VERSION__"] = "0.7.
|
|
165
|
+
RemoteApp2["__APP_VERSION__"] = "0.7.2";
|
|
191
166
|
return /* @__PURE__ */ React__default.createElement(RemoteApp2, null);
|
|
192
167
|
});
|
|
193
168
|
function withRouterData(WrappedComponent) {
|
|
@@ -337,7 +312,7 @@ if (process.env.NODE_ENV === "production") {
|
|
|
337
312
|
};
|
|
338
313
|
}
|
|
339
314
|
function createBridgeComponent(bridgeInfo) {
|
|
340
|
-
return (
|
|
315
|
+
return () => {
|
|
341
316
|
const rootMap = /* @__PURE__ */ new Map();
|
|
342
317
|
const RawComponent = (info) => {
|
|
343
318
|
const { appInfo, propsInfo, ...restProps } = info;
|
|
@@ -353,7 +328,6 @@ function createBridgeComponent(bridgeInfo) {
|
|
|
353
328
|
};
|
|
354
329
|
return {
|
|
355
330
|
async render(info) {
|
|
356
|
-
var _a, _b, _c, _d;
|
|
357
331
|
LoggerInstance.log(`createBridgeComponent render Info`, info);
|
|
358
332
|
const {
|
|
359
333
|
moduleName,
|
|
@@ -363,12 +337,6 @@ function createBridgeComponent(bridgeInfo) {
|
|
|
363
337
|
fallback,
|
|
364
338
|
...propsInfo
|
|
365
339
|
} = info;
|
|
366
|
-
const moduleNameWithoutExpose = getModuleName(moduleName);
|
|
367
|
-
const instance = __FEDERATION__.__INSTANCES__.find(
|
|
368
|
-
(v) => v.name === moduleNameWithoutExpose
|
|
369
|
-
);
|
|
370
|
-
LoggerInstance.log(`createBridgeComponent remote instance`, instance);
|
|
371
|
-
const beforeBridgeRenderRes = ((_c = (_b = (_a = instance == null ? void 0 : instance.bridgeHook) == null ? void 0 : _a.lifecycle) == null ? void 0 : _b.beforeBridgeRender) == null ? void 0 : _c.emit(info)) || {};
|
|
372
340
|
const rootComponentWithErrorBoundary = (
|
|
373
341
|
// set ErrorBoundary for RawComponent rendering error, usually caused by user app rendering error
|
|
374
342
|
/* @__PURE__ */ React.createElement(ErrorBoundary, { FallbackComponent: fallback }, /* @__PURE__ */ React.createElement(
|
|
@@ -379,7 +347,7 @@ function createBridgeComponent(bridgeInfo) {
|
|
|
379
347
|
basename,
|
|
380
348
|
memoryRoute
|
|
381
349
|
},
|
|
382
|
-
propsInfo
|
|
350
|
+
propsInfo
|
|
383
351
|
}
|
|
384
352
|
))
|
|
385
353
|
);
|
|
@@ -397,24 +365,11 @@ function createBridgeComponent(bridgeInfo) {
|
|
|
397
365
|
const renderFn = (bridgeInfo == null ? void 0 : bridgeInfo.render) || ReactDOM.render;
|
|
398
366
|
renderFn == null ? void 0 : renderFn(rootComponentWithErrorBoundary, info.dom);
|
|
399
367
|
}
|
|
400
|
-
const afterBridgeRender = (bridgeInfo == null ? void 0 : bridgeInfo.hooks) && (bridgeInfo == null ? void 0 : bridgeInfo.hooks.afterBridgeDestroy) || ((_d = params == null ? void 0 : params.hooks) == null ? void 0 : _d.afterBridgeRender);
|
|
401
|
-
afterBridgeRender && afterBridgeRender(info);
|
|
402
368
|
},
|
|
403
369
|
async destroy(info) {
|
|
404
|
-
var _a, _b, _c, _d, _e, _f;
|
|
405
370
|
LoggerInstance.log(`createBridgeComponent destroy Info`, {
|
|
406
371
|
dom: info.dom
|
|
407
372
|
});
|
|
408
|
-
const moduleNameWithoutExpose = getModuleName(info.moduleName);
|
|
409
|
-
LoggerInstance.log(
|
|
410
|
-
`createBridgeComponent remote module without expose name >>>`,
|
|
411
|
-
moduleNameWithoutExpose
|
|
412
|
-
);
|
|
413
|
-
const instance = __FEDERATION__.__INSTANCES__.find(
|
|
414
|
-
(v) => v.name === moduleNameWithoutExpose
|
|
415
|
-
);
|
|
416
|
-
LoggerInstance.log(`createBridgeComponent remote instance`, instance);
|
|
417
|
-
(_c = (_b = (_a = instance == null ? void 0 : instance.bridgeHook) == null ? void 0 : _a.lifecycle) == null ? void 0 : _b.beforeBridgeDestroy) == null ? void 0 : _c.emit(info);
|
|
418
373
|
if (atLeastReact18(React)) {
|
|
419
374
|
const root = rootMap.get(info.dom);
|
|
420
375
|
root == null ? void 0 : root.unmount();
|
|
@@ -422,7 +377,6 @@ function createBridgeComponent(bridgeInfo) {
|
|
|
422
377
|
} else {
|
|
423
378
|
ReactDOM.unmountComponentAtNode(info.dom);
|
|
424
379
|
}
|
|
425
|
-
(_f = (_e = (_d = instance == null ? void 0 : instance.bridgeHook) == null ? void 0 : _d.lifecycle) == null ? void 0 : _e.afterBridgeDestroy) == null ? void 0 : _f.emit(info);
|
|
426
380
|
},
|
|
427
381
|
rawComponent: bridgeInfo.rootComponent,
|
|
428
382
|
__BRIDGE_FN__: (_args) => {
|
package/dist/router-v5.cjs.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const React = require("react");
|
|
4
4
|
const ReactRouterDom$1 = require("react-router-dom/index.js");
|
|
5
|
-
const context = require("./context-
|
|
5
|
+
const context = require("./context-BBLu8BlQ.cjs");
|
|
6
6
|
const ReactRouterDom = require("react-router-dom/index.js");
|
|
7
7
|
function _interopNamespaceDefault(e) {
|
|
8
8
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
package/dist/router-v5.es.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React__default, { useContext } from "react";
|
|
2
2
|
import * as ReactRouterDom$1 from "react-router-dom/index.js";
|
|
3
|
-
import { R as RouterContext, L as LoggerInstance } from "./context-
|
|
3
|
+
import { R as RouterContext, L as LoggerInstance } from "./context-BcyT-d0V.js";
|
|
4
4
|
export * from "react-router-dom/index.js";
|
|
5
5
|
function WraperRouter(props) {
|
|
6
6
|
const { basename, ...propsRes } = props;
|
package/dist/router-v6.cjs.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const React = require("react");
|
|
4
4
|
const ReactRouterDom = require("react-router-dom/dist/index.js");
|
|
5
|
-
const context = require("./context-
|
|
5
|
+
const context = require("./context-BBLu8BlQ.cjs");
|
|
6
6
|
function _interopNamespaceDefault(e) {
|
|
7
7
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
8
8
|
if (e) {
|
package/dist/router-v6.es.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React__default, { useContext } from "react";
|
|
2
2
|
import * as ReactRouterDom from "react-router-dom/dist/index.js";
|
|
3
3
|
export * from "react-router-dom/dist/index.js";
|
|
4
|
-
import { R as RouterContext, L as LoggerInstance } from "./context-
|
|
4
|
+
import { R as RouterContext, L as LoggerInstance } from "./context-BcyT-d0V.js";
|
|
5
5
|
function WraperRouter(props) {
|
|
6
6
|
const { basename, ...propsRes } = props;
|
|
7
7
|
const routerContextProps = useContext(RouterContext) || {};
|
package/dist/router.cjs.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const React = require("react");
|
|
4
4
|
const ReactRouterDom = require("react-router-dom/");
|
|
5
|
-
const context = require("./context-
|
|
5
|
+
const context = require("./context-BBLu8BlQ.cjs");
|
|
6
6
|
function _interopNamespaceDefault(e) {
|
|
7
7
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
8
8
|
if (e) {
|
|
@@ -65,7 +65,7 @@ function WrapperRouterProvider(props) {
|
|
|
65
65
|
return /* @__PURE__ */ React.createElement(RouterProvider, { router: MemeoryRouterInstance });
|
|
66
66
|
} else {
|
|
67
67
|
const BrowserRouterInstance = createBrowserRouter(routers, {
|
|
68
|
-
basename: routerContextProps.basename
|
|
68
|
+
basename: routerContextProps.basename,
|
|
69
69
|
future: router.future,
|
|
70
70
|
window: router.window
|
|
71
71
|
});
|
package/dist/router.es.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React__default, { useContext } from "react";
|
|
2
2
|
import * as ReactRouterDom from "react-router-dom/";
|
|
3
3
|
export * from "react-router-dom/";
|
|
4
|
-
import { R as RouterContext, L as LoggerInstance } from "./context-
|
|
4
|
+
import { R as RouterContext, L as LoggerInstance } from "./context-BcyT-d0V.js";
|
|
5
5
|
function WrapperRouter(props) {
|
|
6
6
|
const { basename, ...propsRes } = props;
|
|
7
7
|
const routerContextProps = useContext(RouterContext) || {};
|
|
@@ -47,7 +47,7 @@ function WrapperRouterProvider(props) {
|
|
|
47
47
|
return /* @__PURE__ */ React__default.createElement(RouterProvider, { router: MemeoryRouterInstance });
|
|
48
48
|
} else {
|
|
49
49
|
const BrowserRouterInstance = createBrowserRouter(routers, {
|
|
50
|
-
basename: routerContextProps.basename
|
|
50
|
+
basename: routerContextProps.basename,
|
|
51
51
|
future: router.future,
|
|
52
52
|
window: router.window
|
|
53
53
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@module-federation/bridge-react",
|
|
3
|
-
"version": "0.0.0-next-
|
|
3
|
+
"version": "0.0.0-next-20241112032845",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -41,14 +41,13 @@
|
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@loadable/component": "^5.16.4",
|
|
43
43
|
"react-error-boundary": "^4.0.13",
|
|
44
|
-
"@module-federation/bridge-shared": "0.0.0-next-
|
|
45
|
-
"@module-federation/sdk": "0.0.0-next-
|
|
44
|
+
"@module-federation/bridge-shared": "0.0.0-next-20241112032845",
|
|
45
|
+
"@module-federation/sdk": "0.0.0-next-20241112032845"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
48
|
"react": ">=16.9.0",
|
|
49
49
|
"react-dom": ">=16.9.0",
|
|
50
|
-
"react-router-dom": ">=4"
|
|
51
|
-
"@module-federation/runtime": "0.0.0-next-20241108091829"
|
|
50
|
+
"react-router-dom": ">=4"
|
|
52
51
|
},
|
|
53
52
|
"devDependencies": {
|
|
54
53
|
"@testing-library/react": "15.0.7",
|
package/src/create.tsx
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
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
|
-
import { LoggerInstance } from './utils';
|
|
7
8
|
import RemoteApp from './remote';
|
|
8
|
-
import type { ProviderParams } from '@module-federation/bridge-shared';
|
|
9
9
|
|
|
10
10
|
export interface RenderFnParams extends ProviderParams {
|
|
11
11
|
dom?: any;
|
package/src/provider.tsx
CHANGED
|
@@ -2,38 +2,25 @@ 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';
|
|
10
|
+
import { LoggerInstance, atLeastReact18 } from './utils';
|
|
9
11
|
import { ErrorBoundary } from 'react-error-boundary';
|
|
10
|
-
import { RouterContext } from './context';
|
|
11
|
-
import { LoggerInstance, atLeastReact18, getModuleName } from './utils';
|
|
12
12
|
|
|
13
|
-
type RenderParams = RenderFnParams & any;
|
|
14
|
-
type DestroyParams = {
|
|
15
|
-
moduleName: string;
|
|
16
|
-
dom: HTMLElement;
|
|
17
|
-
};
|
|
18
13
|
type RootType = HTMLElement | ReactDOMClient.Root;
|
|
19
|
-
|
|
20
|
-
type BridgeHooks = {
|
|
21
|
-
beforeBridgeRender?: (params: RenderFnParams) => void | Record<string, any>;
|
|
22
|
-
afterBridgeRender?: (params: RenderFnParams) => void | Record<string, any>;
|
|
23
|
-
beforeBridgeDestroy?: (params: DestroyParams) => void | Record<string, any>;
|
|
24
|
-
afterBridgeDestroy?: (params: DestroyParams) => void | Record<string, any>;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
14
|
type ProviderFnParams<T> = {
|
|
28
15
|
rootComponent: React.ComponentType<T>;
|
|
29
16
|
render?: (
|
|
30
17
|
App: React.ReactElement,
|
|
31
18
|
id?: HTMLElement | string,
|
|
32
19
|
) => RootType | Promise<RootType>;
|
|
33
|
-
hooks?: BridgeHooks;
|
|
34
20
|
};
|
|
21
|
+
|
|
35
22
|
export function createBridgeComponent<T>(bridgeInfo: ProviderFnParams<T>) {
|
|
36
|
-
return (
|
|
23
|
+
return () => {
|
|
37
24
|
const rootMap = new Map<any, RootType>();
|
|
38
25
|
const RawComponent = (info: { propsInfo: T; appInfo: ProviderParams }) => {
|
|
39
26
|
const { appInfo, propsInfo, ...restProps } = info;
|
|
@@ -50,7 +37,7 @@ export function createBridgeComponent<T>(bridgeInfo: ProviderFnParams<T>) {
|
|
|
50
37
|
};
|
|
51
38
|
|
|
52
39
|
return {
|
|
53
|
-
async render(info:
|
|
40
|
+
async render(info: RenderFnParams & any) {
|
|
54
41
|
LoggerInstance.log(`createBridgeComponent render Info`, info);
|
|
55
42
|
const {
|
|
56
43
|
moduleName,
|
|
@@ -60,16 +47,6 @@ export function createBridgeComponent<T>(bridgeInfo: ProviderFnParams<T>) {
|
|
|
60
47
|
fallback,
|
|
61
48
|
...propsInfo
|
|
62
49
|
} = info;
|
|
63
|
-
|
|
64
|
-
const moduleNameWithoutExpose = getModuleName(moduleName);
|
|
65
|
-
const instance = __FEDERATION__.__INSTANCES__.find(
|
|
66
|
-
(v) => v.name === moduleNameWithoutExpose,
|
|
67
|
-
);
|
|
68
|
-
LoggerInstance.log(`createBridgeComponent remote instance`, instance);
|
|
69
|
-
|
|
70
|
-
const beforeBridgeRenderRes =
|
|
71
|
-
instance?.bridgeHook?.lifecycle?.beforeBridgeRender?.emit(info) || {};
|
|
72
|
-
|
|
73
50
|
const rootComponentWithErrorBoundary = (
|
|
74
51
|
// set ErrorBoundary for RawComponent rendering error, usually caused by user app rendering error
|
|
75
52
|
<ErrorBoundary FallbackComponent={fallback}>
|
|
@@ -79,13 +56,11 @@ export function createBridgeComponent<T>(bridgeInfo: ProviderFnParams<T>) {
|
|
|
79
56
|
basename,
|
|
80
57
|
memoryRoute,
|
|
81
58
|
}}
|
|
82
|
-
propsInfo={
|
|
83
|
-
{ ...propsInfo, ...beforeBridgeRenderRes?.extraProps } as T
|
|
84
|
-
}
|
|
59
|
+
propsInfo={propsInfo}
|
|
85
60
|
/>
|
|
86
61
|
</ErrorBoundary>
|
|
87
62
|
);
|
|
88
|
-
|
|
63
|
+
|
|
89
64
|
if (atLeastReact18(React)) {
|
|
90
65
|
if (bridgeInfo?.render) {
|
|
91
66
|
// in case bridgeInfo?.render is an async function, resolve this to promise
|
|
@@ -102,29 +77,11 @@ export function createBridgeComponent<T>(bridgeInfo: ProviderFnParams<T>) {
|
|
|
102
77
|
const renderFn = bridgeInfo?.render || ReactDOM.render;
|
|
103
78
|
renderFn?.(rootComponentWithErrorBoundary, info.dom);
|
|
104
79
|
}
|
|
105
|
-
|
|
106
|
-
const afterBridgeRender =
|
|
107
|
-
(bridgeInfo?.hooks && bridgeInfo?.hooks.afterBridgeDestroy) ||
|
|
108
|
-
params?.hooks?.afterBridgeRender;
|
|
109
|
-
afterBridgeRender && afterBridgeRender(info);
|
|
110
80
|
},
|
|
111
|
-
|
|
112
|
-
async destroy(info: DestroyParams) {
|
|
81
|
+
async destroy(info: { dom: HTMLElement }) {
|
|
113
82
|
LoggerInstance.log(`createBridgeComponent destroy Info`, {
|
|
114
83
|
dom: info.dom,
|
|
115
84
|
});
|
|
116
|
-
const moduleNameWithoutExpose = getModuleName(info.moduleName);
|
|
117
|
-
LoggerInstance.log(
|
|
118
|
-
`createBridgeComponent remote module without expose name >>>`,
|
|
119
|
-
moduleNameWithoutExpose,
|
|
120
|
-
);
|
|
121
|
-
const instance = __FEDERATION__.__INSTANCES__.find(
|
|
122
|
-
(v) => v.name === moduleNameWithoutExpose,
|
|
123
|
-
);
|
|
124
|
-
LoggerInstance.log(`createBridgeComponent remote instance`, instance);
|
|
125
|
-
|
|
126
|
-
instance?.bridgeHook?.lifecycle?.beforeBridgeDestroy?.emit(info);
|
|
127
|
-
// call destroy function
|
|
128
85
|
if (atLeastReact18(React)) {
|
|
129
86
|
const root = rootMap.get(info.dom);
|
|
130
87
|
(root as ReactDOMClient.Root)?.unmount();
|
|
@@ -132,8 +89,6 @@ export function createBridgeComponent<T>(bridgeInfo: ProviderFnParams<T>) {
|
|
|
132
89
|
} else {
|
|
133
90
|
ReactDOM.unmountComponentAtNode(info.dom);
|
|
134
91
|
}
|
|
135
|
-
|
|
136
|
-
instance?.bridgeHook?.lifecycle?.afterBridgeDestroy?.emit(info);
|
|
137
92
|
},
|
|
138
93
|
rawComponent: bridgeInfo.rootComponent,
|
|
139
94
|
__BRIDGE_FN__: (_args: T) => {},
|
package/src/remote/index.tsx
CHANGED
|
@@ -7,10 +7,9 @@ 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
|
-
import { LoggerInstance, pathJoin, getRootDomDefaultClassName } from '../utils';
|
|
13
|
-
import { getInstance } from '@module-federation/runtime';
|
|
14
13
|
|
|
15
14
|
declare const __APP_VERSION__: string;
|
|
16
15
|
export interface RenderFnParams extends ProviderParams {
|
|
@@ -40,8 +39,6 @@ const RemoteAppWrapper = forwardRef(function (
|
|
|
40
39
|
props: RemoteAppParams & RenderFnParams,
|
|
41
40
|
ref,
|
|
42
41
|
) {
|
|
43
|
-
const host = getInstance();
|
|
44
|
-
LoggerInstance.log(`RemoteAppWrapper host >>>`, host);
|
|
45
42
|
const RemoteApp = () => {
|
|
46
43
|
LoggerInstance.log(`RemoteAppWrapper RemoteApp props >>>`, { props });
|
|
47
44
|
const {
|
|
@@ -68,7 +65,7 @@ const RemoteAppWrapper = forwardRef(function (
|
|
|
68
65
|
const providerReturn = providerInfo();
|
|
69
66
|
providerInfoRef.current = providerReturn;
|
|
70
67
|
|
|
71
|
-
|
|
68
|
+
const renderProps = {
|
|
72
69
|
moduleName,
|
|
73
70
|
dom: rootRef.current,
|
|
74
71
|
basename,
|
|
@@ -81,14 +78,7 @@ const RemoteAppWrapper = forwardRef(function (
|
|
|
81
78
|
`createRemoteComponent LazyComponent render >>>`,
|
|
82
79
|
renderProps,
|
|
83
80
|
);
|
|
84
|
-
|
|
85
|
-
// TODO: 寻找当前 remote 实例上的 hostName, 找到 host instance
|
|
86
|
-
const beforeBridgeRenderRes =
|
|
87
|
-
host?.bridgeHook?.lifecycle?.beforeBridgeRender?.emit(renderProps) ||
|
|
88
|
-
{};
|
|
89
|
-
renderProps = { ...renderProps, ...beforeBridgeRenderRes.extraProps };
|
|
90
81
|
providerReturn.render(renderProps);
|
|
91
|
-
host?.bridgeHook?.lifecycle?.afterBridgeRender?.emit(renderProps);
|
|
92
82
|
});
|
|
93
83
|
|
|
94
84
|
return () => {
|
|
@@ -99,37 +89,17 @@ const RemoteAppWrapper = forwardRef(function (
|
|
|
99
89
|
`createRemoteComponent LazyComponent destroy >>>`,
|
|
100
90
|
{ moduleName, basename, dom: renderDom.current },
|
|
101
91
|
);
|
|
102
|
-
host?.bridgeHook?.lifecycle?.beforeBridgeDestroy?.emit({
|
|
103
|
-
moduleName,
|
|
104
|
-
dom: renderDom.current,
|
|
105
|
-
basename,
|
|
106
|
-
memoryRoute,
|
|
107
|
-
fallback,
|
|
108
|
-
...resProps,
|
|
109
|
-
});
|
|
110
92
|
providerInfoRef.current?.destroy({
|
|
111
|
-
moduleName,
|
|
112
|
-
dom: renderDom.current,
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
host?.bridgeHook?.lifecycle?.afterBridgeDestroy?.emit({
|
|
116
|
-
moduleName,
|
|
117
93
|
dom: renderDom.current,
|
|
118
|
-
basename,
|
|
119
|
-
memoryRoute,
|
|
120
|
-
fallback,
|
|
121
|
-
...resProps,
|
|
122
94
|
});
|
|
123
95
|
}
|
|
124
96
|
});
|
|
125
97
|
};
|
|
126
98
|
}, []);
|
|
127
99
|
|
|
128
|
-
// bridge-remote-root
|
|
129
|
-
const rootComponentClassName = `${getRootDomDefaultClassName(moduleName)} ${props?.className}`;
|
|
130
100
|
return (
|
|
131
101
|
<div
|
|
132
|
-
className={
|
|
102
|
+
className={props?.className}
|
|
133
103
|
style={props?.style}
|
|
134
104
|
ref={rootRef}
|
|
135
105
|
></div>
|
package/src/router-v5.tsx
CHANGED
|
@@ -2,6 +2,7 @@ import React, { useContext } from 'react';
|
|
|
2
2
|
// The upper alias react-router-dom$ into this file avoids the loop
|
|
3
3
|
// @ts-ignore
|
|
4
4
|
import * as ReactRouterDom from 'react-router-dom/index.js';
|
|
5
|
+
|
|
5
6
|
import { RouterContext } from './context';
|
|
6
7
|
import { LoggerInstance } from './utils';
|
|
7
8
|
|
package/src/router.tsx
CHANGED
|
@@ -59,7 +59,7 @@ function WrapperRouterProvider(
|
|
|
59
59
|
return <RouterProvider router={MemeoryRouterInstance} />;
|
|
60
60
|
} else {
|
|
61
61
|
const BrowserRouterInstance = createBrowserRouter(routers, {
|
|
62
|
-
basename: routerContextProps.basename
|
|
62
|
+
basename: routerContextProps.basename,
|
|
63
63
|
future: router.future,
|
|
64
64
|
window: router.window,
|
|
65
65
|
});
|
package/src/utils.ts
CHANGED
|
@@ -41,24 +41,3 @@ export function pathJoin(...args: string[]) {
|
|
|
41
41
|
}, '');
|
|
42
42
|
return res || '/';
|
|
43
43
|
}
|
|
44
|
-
|
|
45
|
-
export const getModuleName = (id: string) => {
|
|
46
|
-
if (!id) {
|
|
47
|
-
return id;
|
|
48
|
-
}
|
|
49
|
-
// separate module name without detailed module path
|
|
50
|
-
// @vmok-e2e/edenx-demo-app2/button -> @vmok-e2e/edenx-demo-app2
|
|
51
|
-
const idArray = id.split('/');
|
|
52
|
-
if (idArray.length < 2) {
|
|
53
|
-
return id;
|
|
54
|
-
}
|
|
55
|
-
return idArray[0] + '/' + idArray[1];
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
export const getRootDomDefaultClassName = (moduleName: string) => {
|
|
59
|
-
if (!moduleName) {
|
|
60
|
-
return '';
|
|
61
|
-
}
|
|
62
|
-
const name = getModuleName(moduleName).replace(/\@/, '').replace(/\//, '-');
|
|
63
|
-
return `bridge-root-component-${name}`;
|
|
64
|
-
};
|