@module-federation/bridge-react 0.0.0-next-20240620034636 → 0.0.0-next-20240620060503

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  # @module-federation/bridge-react
2
2
 
3
- ## 0.0.0-next-20240620034636
3
+ ## 0.0.0-next-20240620060503
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - @module-federation/bridge-shared@0.0.0-next-20240620034636
7
+ - @module-federation/bridge-shared@0.0.0-next-20240620060503
@@ -48,8 +48,26 @@ function atLeastReact18(React2) {
48
48
  return false;
49
49
  }
50
50
  }
51
+ function pathJoin(...args) {
52
+ const res = args.reduce((res2, path) => {
53
+ let nPath = path;
54
+ if (!nPath || typeof nPath !== "string") {
55
+ return res2;
56
+ }
57
+ if (nPath[0] !== "/") {
58
+ nPath = `/${nPath}`;
59
+ }
60
+ const lastIndex = nPath.length - 1;
61
+ if (nPath[lastIndex] === "/") {
62
+ nPath = nPath.substring(0, lastIndex);
63
+ }
64
+ return res2 + nPath;
65
+ }, "");
66
+ return res || "/";
67
+ }
51
68
  const RouterContext = React.createContext(null);
52
69
  exports.LoggerInstance = LoggerInstance;
53
70
  exports.RouterContext = RouterContext;
54
71
  exports.atLeastReact18 = atLeastReact18;
55
72
  exports.f = f;
73
+ exports.pathJoin = pathJoin;
@@ -47,10 +47,28 @@ function atLeastReact18(React2) {
47
47
  return false;
48
48
  }
49
49
  }
50
+ function pathJoin(...args) {
51
+ const res = args.reduce((res2, path) => {
52
+ let nPath = path;
53
+ if (!nPath || typeof nPath !== "string") {
54
+ return res2;
55
+ }
56
+ if (nPath[0] !== "/") {
57
+ nPath = `/${nPath}`;
58
+ }
59
+ const lastIndex = nPath.length - 1;
60
+ if (nPath[lastIndex] === "/") {
61
+ nPath = nPath.substring(0, lastIndex);
62
+ }
63
+ return res2 + nPath;
64
+ }, "");
65
+ return res || "/";
66
+ }
50
67
  const RouterContext = React__default.createContext(null);
51
68
  export {
52
69
  LoggerInstance as L,
53
70
  RouterContext as R,
54
71
  atLeastReact18 as a,
55
- f
72
+ f,
73
+ pathJoin as p
56
74
  };
package/dist/index.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-ePt4wynZ.cjs");
5
+ const context = require("./context--mtFt3tp.cjs");
6
6
  const ReactDOM = require("react-dom");
7
7
  function _interopNamespaceDefault(e) {
8
8
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
@@ -86,6 +86,7 @@ const RemoteApp = ({
86
86
  RemoteApp["__APP_VERSION__"] = "0.0.1";
87
87
  function createRemoteComponent(lazyComponent, info) {
88
88
  return (props) => {
89
+ var _a;
89
90
  const exportName = (info == null ? void 0 : info.export) || "default";
90
91
  let basename = "/";
91
92
  let enableDispathPopstate = false;
@@ -96,12 +97,35 @@ function createRemoteComponent(lazyComponent, info) {
96
97
  } catch {
97
98
  enableDispathPopstate = false;
98
99
  }
99
- if (ReactRouterDOM__namespace.UNSAFE_RouteContext && enableDispathPopstate) {
100
- routerContextVal = React.useContext(ReactRouterDOM__namespace.UNSAFE_RouteContext);
101
- if (routerContextVal && routerContextVal.matches && routerContextVal.matches[0] && routerContextVal.matches[0].pathnameBase) {
102
- basename = routerContextVal.matches[0].pathnameBase;
100
+ if (props.basename) {
101
+ basename = props.basename;
102
+ } else if (enableDispathPopstate) {
103
+ const ReactRouterDOMAny = ReactRouterDOM__namespace;
104
+ const useRouteMatch = ReactRouterDOMAny["useRouteMatch"];
105
+ const useHistory = ReactRouterDOMAny["useHistory"];
106
+ const useHref = ReactRouterDOMAny["useHref"];
107
+ const UNSAFE_RouteContext = ReactRouterDOMAny["UNSAFE_RouteContext"];
108
+ if (UNSAFE_RouteContext) {
109
+ if (useHref) {
110
+ basename = useHref == null ? void 0 : useHref("/");
111
+ }
112
+ routerContextVal = React.useContext(UNSAFE_RouteContext);
113
+ if (routerContextVal && routerContextVal.matches && routerContextVal.matches[0] && routerContextVal.matches[0].pathnameBase) {
114
+ basename = context.pathJoin(
115
+ basename,
116
+ routerContextVal.matches[0].pathnameBase || "/"
117
+ );
118
+ }
119
+ } else {
120
+ const match = useRouteMatch == null ? void 0 : useRouteMatch();
121
+ if (useHistory) {
122
+ const history = useHistory == null ? void 0 : useHistory();
123
+ basename = (_a = history == null ? void 0 : history.createHref) == null ? void 0 : _a.call(history, { pathname: "/" });
124
+ }
125
+ if (match) {
126
+ basename = context.pathJoin(basename, (match == null ? void 0 : match.path) || "/");
127
+ }
103
128
  }
104
- enableDispathPopstate = (routerContextVal == null ? void 0 : routerContextVal.matches) && (routerContextVal == null ? void 0 : routerContextVal.matches.length) > 0;
105
129
  }
106
130
  const LazyComponent = React.useMemo(() => {
107
131
  return React.lazy(async () => {
package/dist/index.es.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as React from "react";
2
2
  import React__default, { useContext, useMemo, useRef, useState, useEffect } from "react";
3
3
  import * as ReactRouterDOM from "react-router-dom";
4
- import { L as LoggerInstance, f, a as atLeastReact18, R as RouterContext } from "./context-CPtN38Ur.js";
4
+ import { p as pathJoin, L as LoggerInstance, f, a as atLeastReact18, R as RouterContext } from "./context-Bw2PEwa6.js";
5
5
  import ReactDOM from "react-dom";
6
6
  const RemoteApp = ({
7
7
  name,
@@ -67,6 +67,7 @@ const RemoteApp = ({
67
67
  RemoteApp["__APP_VERSION__"] = "0.0.1";
68
68
  function createRemoteComponent(lazyComponent, info) {
69
69
  return (props) => {
70
+ var _a;
70
71
  const exportName = (info == null ? void 0 : info.export) || "default";
71
72
  let basename = "/";
72
73
  let enableDispathPopstate = false;
@@ -77,12 +78,35 @@ function createRemoteComponent(lazyComponent, info) {
77
78
  } catch {
78
79
  enableDispathPopstate = false;
79
80
  }
80
- if (ReactRouterDOM.UNSAFE_RouteContext && enableDispathPopstate) {
81
- routerContextVal = useContext(ReactRouterDOM.UNSAFE_RouteContext);
82
- if (routerContextVal && routerContextVal.matches && routerContextVal.matches[0] && routerContextVal.matches[0].pathnameBase) {
83
- basename = routerContextVal.matches[0].pathnameBase;
81
+ if (props.basename) {
82
+ basename = props.basename;
83
+ } else if (enableDispathPopstate) {
84
+ const ReactRouterDOMAny = ReactRouterDOM;
85
+ const useRouteMatch = ReactRouterDOMAny["useRouteMatch"];
86
+ const useHistory = ReactRouterDOMAny["useHistory"];
87
+ const useHref = ReactRouterDOMAny["useHref"];
88
+ const UNSAFE_RouteContext = ReactRouterDOMAny["UNSAFE_RouteContext"];
89
+ if (UNSAFE_RouteContext) {
90
+ if (useHref) {
91
+ basename = useHref == null ? void 0 : useHref("/");
92
+ }
93
+ routerContextVal = useContext(UNSAFE_RouteContext);
94
+ if (routerContextVal && routerContextVal.matches && routerContextVal.matches[0] && routerContextVal.matches[0].pathnameBase) {
95
+ basename = pathJoin(
96
+ basename,
97
+ routerContextVal.matches[0].pathnameBase || "/"
98
+ );
99
+ }
100
+ } else {
101
+ const match = useRouteMatch == null ? void 0 : useRouteMatch();
102
+ if (useHistory) {
103
+ const history = useHistory == null ? void 0 : useHistory();
104
+ basename = (_a = history == null ? void 0 : history.createHref) == null ? void 0 : _a.call(history, { pathname: "/" });
105
+ }
106
+ if (match) {
107
+ basename = pathJoin(basename, (match == null ? void 0 : match.path) || "/");
108
+ }
84
109
  }
85
- enableDispathPopstate = (routerContextVal == null ? void 0 : routerContextVal.matches) && (routerContextVal == null ? void 0 : routerContextVal.matches.length) > 0;
86
110
  }
87
111
  const LazyComponent = useMemo(() => {
88
112
  return React__default.lazy(async () => {
@@ -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-ePt4wynZ.cjs");
5
+ const context = require("./context--mtFt3tp.cjs");
6
6
  function _interopNamespaceDefault(e) {
7
7
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
8
8
  if (e) {
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-CPtN38Ur.js";
4
+ import { R as RouterContext, L as LoggerInstance } from "./context-Bw2PEwa6.js";
5
5
  function WraperRouter(props) {
6
6
  const { basename, ...propsRes } = props;
7
7
  const routerContextProps = useContext(RouterContext) || {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@module-federation/bridge-react",
3
- "version": "0.0.0-next-20240620034636",
3
+ "version": "0.0.0-next-20240620060503",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -25,7 +25,7 @@
25
25
  "dependencies": {
26
26
  "@loadable/component": "^5.16.4",
27
27
  "react-error-boundary": "^4.0.13",
28
- "@module-federation/bridge-shared": "0.0.0-next-20240620034636"
28
+ "@module-federation/bridge-shared": "0.0.0-next-20240620060503"
29
29
  },
30
30
  "peerDependencies": {
31
31
  "react": ">=16.9.0",
package/src/create.tsx CHANGED
@@ -8,7 +8,7 @@ import React, {
8
8
  } from 'react';
9
9
  import * as ReactRouterDOM from 'react-router-dom';
10
10
  import type { ProviderParams } from '@module-federation/bridge-shared';
11
- import { LoggerInstance } from './utils';
11
+ import { LoggerInstance, pathJoin } from './utils';
12
12
  import { dispatchPopstateEnv } from '@module-federation/bridge-shared';
13
13
 
14
14
  declare const __APP_VERSION__: string;
@@ -135,18 +135,45 @@ export function createRemoteComponent<T, E extends keyof T>(
135
135
  enableDispathPopstate = false;
136
136
  }
137
137
 
138
- if (ReactRouterDOM.UNSAFE_RouteContext && enableDispathPopstate) {
139
- routerContextVal = useContext(ReactRouterDOM.UNSAFE_RouteContext);
140
- if (
141
- routerContextVal &&
142
- routerContextVal.matches &&
143
- routerContextVal.matches[0] &&
144
- routerContextVal.matches[0].pathnameBase
145
- ) {
146
- basename = routerContextVal.matches[0].pathnameBase;
138
+ if (props.basename) {
139
+ basename = props.basename;
140
+ } else if (enableDispathPopstate) {
141
+ const ReactRouterDOMAny: any = ReactRouterDOM;
142
+ // Avoid building tools checking references
143
+ const useRouteMatch = ReactRouterDOMAny['use' + 'RouteMatch']; //v5
144
+ const useHistory = ReactRouterDOMAny['use' + 'History']; //v5
145
+ const useHref = ReactRouterDOMAny['use' + 'Href'];
146
+ const UNSAFE_RouteContext = ReactRouterDOMAny['UNSAFE_' + 'RouteContext'];
147
+
148
+ if (UNSAFE_RouteContext /* react-router@6 */) {
149
+ if (useHref) {
150
+ basename = useHref?.('/');
151
+ }
152
+ routerContextVal = useContext(UNSAFE_RouteContext);
153
+ if (
154
+ routerContextVal &&
155
+ routerContextVal.matches &&
156
+ routerContextVal.matches[0] &&
157
+ routerContextVal.matches[0].pathnameBase
158
+ ) {
159
+ basename = pathJoin(
160
+ basename,
161
+ routerContextVal.matches[0].pathnameBase || '/',
162
+ );
163
+ }
164
+ } /* react-router@5 */ else {
165
+ const match = useRouteMatch?.(); // v5
166
+ if (useHistory /* react-router@5 */) {
167
+ // there is no dynamic switching of the router version in the project
168
+ // so hooks can be used in conditional judgment
169
+ const history = useHistory?.();
170
+ // To be compatible to history@4.10.1 and @5.3.0 we cannot write like this `history.createHref(pathname)`
171
+ basename = history?.createHref?.({ pathname: '/' });
172
+ }
173
+ if (match /* react-router@5 */) {
174
+ basename = pathJoin(basename, match?.path || '/');
175
+ }
147
176
  }
148
- enableDispathPopstate =
149
- routerContextVal?.matches && routerContextVal?.matches.length > 0;
150
177
  }
151
178
 
152
179
  const LazyComponent = useMemo(() => {
package/src/utils.ts CHANGED
@@ -21,3 +21,21 @@ export function atLeastReact18(React: typeReact) {
21
21
  return false;
22
22
  }
23
23
  }
24
+
25
+ export function pathJoin(...args: string[]) {
26
+ const res = args.reduce((res, path: string) => {
27
+ let nPath = path;
28
+ if (!nPath || typeof nPath !== 'string') {
29
+ return res;
30
+ }
31
+ if (nPath[0] !== '/') {
32
+ nPath = `/${nPath}`;
33
+ }
34
+ const lastIndex = nPath.length - 1;
35
+ if (nPath[lastIndex] === '/') {
36
+ nPath = nPath.substring(0, lastIndex);
37
+ }
38
+ return res + nPath;
39
+ }, '');
40
+ return res || '/';
41
+ }