@umijs/renderer-react 4.0.0-canary.20220831.1 → 4.0.0-canary.20220914.1

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.
@@ -10,6 +10,7 @@ interface IAppContextType {
10
10
  clientLoaderData: ILoaderData;
11
11
  preloadRoute?: (to: string) => void;
12
12
  serverLoaderData: ILoaderData;
13
+ history?: any;
13
14
  }
14
15
  export declare const AppContext: React.Context<IAppContextType>;
15
16
  export declare function useAppData(): IAppContextType;
package/dist/browser.d.ts CHANGED
@@ -15,4 +15,5 @@ export declare function renderClient(opts: {
15
15
  loadingComponent?: React.ReactNode;
16
16
  history: History;
17
17
  hydrate?: boolean;
18
+ reactRouter5Compat?: boolean;
18
19
  }): void;
package/dist/browser.js CHANGED
@@ -66,7 +66,8 @@ export function renderClient(opts) {
66
66
  var clientRoutes = createClientRoutes({
67
67
  routesById: opts.routes,
68
68
  routeComponents: opts.routeComponents,
69
- loadingComponent: opts.loadingComponent
69
+ loadingComponent: opts.loadingComponent,
70
+ reactRouter5Compat: opts.reactRouter5Compat
70
71
  });
71
72
  opts.pluginManager.applyPlugins({
72
73
  key: 'patchClientRoutes',
@@ -202,7 +203,8 @@ export function renderClient(opts) {
202
203
  basename: basename,
203
204
  clientLoaderData: clientLoaderData,
204
205
  serverLoaderData: serverLoaderData,
205
- preloadRoute: handleRouteChange
206
+ preloadRoute: handleRouteChange,
207
+ history: opts.history
206
208
  }
207
209
  }, rootContainer);
208
210
  };
package/dist/link.js CHANGED
@@ -1,18 +1,15 @@
1
- import _objectSpread from "@babel/runtime/helpers/objectSpread2";
1
+ import _extends from "@babel/runtime/helpers/extends";
2
2
  import React from 'react';
3
3
  import { Link } from 'react-router-dom';
4
4
  import { useAppData } from "./appContext";
5
- import { jsx as _jsx } from "react/jsx-runtime";
6
5
  export function LinkWithPrefetch(props) {
7
6
  var appData = useAppData();
8
7
  var to = typeof props.to === 'string' ? props.to : props.to.pathname;
9
- return /*#__PURE__*/_jsx(Link, _objectSpread(_objectSpread({
8
+ return /*#__PURE__*/React.createElement(Link, _extends({
10
9
  onMouseEnter: function onMouseEnter() {
11
10
  var _appData$preloadRoute;
12
11
 
13
12
  return props.prefetch && to && ((_appData$preloadRoute = appData.preloadRoute) === null || _appData$preloadRoute === void 0 ? void 0 : _appData$preloadRoute.call(appData, to));
14
13
  }
15
- }, props), {}, {
16
- children: props.children
17
- }));
14
+ }, props), props.children);
18
15
  }
package/dist/routes.d.ts CHANGED
@@ -5,4 +5,5 @@ export declare function createClientRoutes(opts: {
5
5
  routeComponents: Record<string, any>;
6
6
  parentId?: string;
7
7
  loadingComponent?: React.ReactNode;
8
+ reactRouter5Compat?: boolean;
8
9
  }): IClientRoute[];
package/dist/routes.js CHANGED
@@ -1,11 +1,12 @@
1
1
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
2
+ import _extends from "@babel/runtime/helpers/extends";
2
3
  import _objectSpread from "@babel/runtime/helpers/objectSpread2";
3
4
  var _excluded = ["redirect"];
4
5
  // @ts-ignore
5
6
  import React from 'react';
6
- import { generatePath, Navigate, useParams } from 'react-router-dom';
7
- import { RouteContext } from "./routeContext";
8
- import { jsx as _jsx } from "react/jsx-runtime";
7
+ import { generatePath, Navigate, useParams, Outlet } from 'react-router-dom';
8
+ import { RouteContext, useRouteData } from "./routeContext";
9
+ import { useAppData } from "./appContext";
9
10
  export function createClientRoutes(opts) {
10
11
  var routesById = opts.routesById,
11
12
  parentId = opts.parentId,
@@ -13,16 +14,23 @@ export function createClientRoutes(opts) {
13
14
  return Object.keys(routesById).filter(function (id) {
14
15
  return routesById[id].parentId === parentId;
15
16
  }).map(function (id) {
16
- var route = createClientRoute({
17
+ var route = createClientRoute(_objectSpread({
17
18
  route: routesById[id],
18
19
  routeComponent: routeComponents[id],
19
- loadingComponent: opts.loadingComponent
20
- });
20
+ loadingComponent: opts.loadingComponent,
21
+ reactRouter5Compat: opts.reactRouter5Compat
22
+ }, opts.reactRouter5Compat && {
23
+ // TODO: 这个不准,没考虑 patchClientRoutes 的场景
24
+ hasChildren: Object.keys(routesById).filter(function (rid) {
25
+ return routesById[rid].parentId === id;
26
+ }).length > 0
27
+ }));
21
28
  var children = createClientRoutes({
22
29
  routesById: routesById,
23
30
  routeComponents: routeComponents,
24
31
  parentId: route.id,
25
- loadingComponent: opts.loadingComponent
32
+ loadingComponent: opts.loadingComponent,
33
+ reactRouter5Compat: opts.reactRouter5Compat
26
34
  });
27
35
 
28
36
  if (children.length > 0) {
@@ -43,7 +51,7 @@ function NavigateWithParams(props) {
43
51
  to: generatePath(props.to, params)
44
52
  });
45
53
 
46
- return /*#__PURE__*/_jsx(Navigate, _objectSpread({
54
+ return /*#__PURE__*/React.createElement(Navigate, _extends({
47
55
  replace: true
48
56
  }, propsWithParams));
49
57
  }
@@ -54,40 +62,58 @@ function createClientRoute(opts) {
54
62
  var redirect = route.redirect,
55
63
  props = _objectWithoutProperties(route, _excluded);
56
64
 
65
+ var Remote = opts.reactRouter5Compat ? RemoteComponentReactRouter5 : RemoteComponent;
57
66
  return _objectSpread({
58
- element: redirect ? /*#__PURE__*/_jsx(NavigateWithParams, {
67
+ element: redirect ? /*#__PURE__*/React.createElement(NavigateWithParams, {
59
68
  to: redirect
60
- }) : /*#__PURE__*/_jsx(RouteContext.Provider, {
69
+ }) : /*#__PURE__*/React.createElement(RouteContext.Provider, {
61
70
  value: {
62
71
  route: opts.route
63
- },
64
- children: /*#__PURE__*/_jsx(RemoteComponent, {
65
- loader: opts.routeComponent,
66
- loadingComponent: opts.loadingComponent || DefaultLoading
67
- })
68
- })
72
+ }
73
+ }, /*#__PURE__*/React.createElement(Remote, {
74
+ loader: /*#__PURE__*/React.memo(opts.routeComponent),
75
+ loadingComponent: opts.loadingComponent || DefaultLoading,
76
+ hasChildren: opts.hasChildren
77
+ }))
69
78
  }, props);
70
79
  }
71
80
 
72
81
  function DefaultLoading() {
73
- return /*#__PURE__*/_jsx("div", {});
82
+ return /*#__PURE__*/React.createElement("div", null);
74
83
  }
75
84
 
76
- function RemoteComponent(props) {
77
- var useSuspense = true; // !!React.startTransition;
85
+ function RemoteComponentReactRouter5(props) {
86
+ var _useRouteData = useRouteData(),
87
+ route = _useRouteData.route;
78
88
 
79
- if (useSuspense) {
80
- var Component = props.loader;
81
- return /*#__PURE__*/_jsx(React.Suspense, {
82
- fallback: /*#__PURE__*/_jsx(props.loadingComponent, {}),
83
- children: /*#__PURE__*/_jsx(Component, {})
84
- });
85
- } else {
86
- return null; // // @ts-ignore
87
- // import loadable from '@loadable/component';
88
- // const Component = loadable(props.loader, {
89
- // fallback: <props.loadingComponent />,
90
- // });
91
- // return <Component />;
92
- }
89
+ var _useAppData = useAppData(),
90
+ history = _useAppData.history,
91
+ clientRoutes = _useAppData.clientRoutes;
92
+
93
+ var params = useParams();
94
+ var match = {
95
+ params: params,
96
+ isExact: true,
97
+ path: route.path,
98
+ url: history.location.pathname
99
+ }; // staticContext 没有兼容 好像没看到对应的兼容写法
100
+
101
+ var Component = props.loader;
102
+ return /*#__PURE__*/React.createElement(React.Suspense, {
103
+ fallback: /*#__PURE__*/React.createElement(props.loadingComponent, null)
104
+ }, /*#__PURE__*/React.createElement(Component, {
105
+ location: history.location,
106
+ match: match,
107
+ history: history,
108
+ params: params,
109
+ route: route,
110
+ routes: clientRoutes
111
+ }, props.hasChildren && /*#__PURE__*/React.createElement(Outlet, null)));
112
+ }
113
+
114
+ function RemoteComponent(props) {
115
+ var Component = props.loader;
116
+ return /*#__PURE__*/React.createElement(React.Suspense, {
117
+ fallback: /*#__PURE__*/React.createElement(props.loadingComponent, null)
118
+ }, /*#__PURE__*/React.createElement(Component, null));
93
119
  }
package/dist/server.js CHANGED
@@ -1,23 +1,21 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/regeneratorRuntime";
1
2
  import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
3
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
- import _regeneratorRuntime from "@babel/runtime/regenerator";
4
4
  import React from 'react';
5
5
  import { StaticRouter } from 'react-router-dom/server';
6
6
  import { AppContext } from "./appContext";
7
7
  import { Routes } from "./browser";
8
8
  import { createClientRoutes } from "./routes";
9
- import { jsx as _jsx } from "react/jsx-runtime";
10
- import { jsxs as _jsxs } from "react/jsx-runtime";
11
9
  // Get the root React component for ReactDOMServer.renderToString
12
10
  export function getClientRootComponent(_x) {
13
11
  return _getClientRootComponent.apply(this, arguments);
14
12
  }
15
13
 
16
14
  function _getClientRootComponent() {
17
- _getClientRootComponent = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(opts) {
15
+ _getClientRootComponent = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(opts) {
18
16
  var basename, components, clientRoutes, rootContainer, _i, _arr, key;
19
17
 
20
- return _regeneratorRuntime.wrap(function _callee$(_context) {
18
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
21
19
  while (1) {
22
20
  switch (_context.prev = _context.next) {
23
21
  case 0:
@@ -27,11 +25,10 @@ function _getClientRootComponent() {
27
25
  routesById: opts.routes,
28
26
  routeComponents: components
29
27
  });
30
- rootContainer = /*#__PURE__*/_jsx(StaticRouter, {
28
+ rootContainer = /*#__PURE__*/React.createElement(StaticRouter, {
31
29
  basename: basename,
32
- location: opts.location,
33
- children: /*#__PURE__*/_jsx(Routes, {})
34
- });
30
+ location: opts.location
31
+ }, /*#__PURE__*/React.createElement(Routes, null));
35
32
 
36
33
  for (_i = 0, _arr = [// Lowest to the highest priority
37
34
  'innerProvider', 'i18nProvider', 'accessProvider', 'dataflowProvider', 'outerProvider', 'rootContainer']; _i < _arr.length; _i++) {
@@ -44,22 +41,20 @@ function _getClientRootComponent() {
44
41
  });
45
42
  }
46
43
 
47
- return _context.abrupt("return", /*#__PURE__*/_jsx(Html, {
44
+ return _context.abrupt("return", /*#__PURE__*/React.createElement(Html, {
48
45
  loaderData: opts.loaderData,
49
- manifest: opts.manifest,
50
- children: /*#__PURE__*/_jsx(AppContext.Provider, {
51
- value: {
52
- routes: opts.routes,
53
- routeComponents: opts.routeComponents,
54
- clientRoutes: clientRoutes,
55
- pluginManager: opts.pluginManager,
56
- basename: basename,
57
- clientLoaderData: {},
58
- serverLoaderData: opts.loaderData
59
- },
60
- children: rootContainer
61
- })
62
- }));
46
+ manifest: opts.manifest
47
+ }, /*#__PURE__*/React.createElement(AppContext.Provider, {
48
+ value: {
49
+ routes: opts.routes,
50
+ routeComponents: opts.routeComponents,
51
+ clientRoutes: clientRoutes,
52
+ pluginManager: opts.pluginManager,
53
+ basename: basename,
54
+ clientLoaderData: {},
55
+ serverLoaderData: opts.loaderData
56
+ }
57
+ }, rootContainer)));
63
58
 
64
59
  case 6:
65
60
  case "end":
@@ -77,31 +72,25 @@ function Html(_ref) {
77
72
  manifest = _ref.manifest;
78
73
  // TODO: 处理 head 标签,比如 favicon.ico 的一致性
79
74
  // TODO: root 支持配置
80
- return /*#__PURE__*/_jsxs("html", {
81
- lang: "en",
82
- children: [/*#__PURE__*/_jsxs("head", {
83
- children: [/*#__PURE__*/_jsx("meta", {
84
- charSet: "utf-8"
85
- }), /*#__PURE__*/_jsx("meta", {
86
- name: "viewport",
87
- content: "width=device-width, initial-scale=1"
88
- }), manifest.assets['umi.css'] && /*#__PURE__*/_jsx("link", {
89
- rel: "stylesheet",
90
- href: manifest.assets['umi.css']
91
- })]
92
- }), /*#__PURE__*/_jsxs("body", {
93
- children: [/*#__PURE__*/_jsx("noscript", {
94
- dangerouslySetInnerHTML: {
95
- __html: "<b>Enable JavaScript to run this app.</b>"
96
- }
97
- }), /*#__PURE__*/_jsx("div", {
98
- id: "root",
99
- children: children
100
- }), /*#__PURE__*/_jsx("script", {
101
- dangerouslySetInnerHTML: {
102
- __html: "window.__UMI_LOADER_DATA__ = ".concat(JSON.stringify(loaderData))
103
- }
104
- })]
105
- })]
106
- });
75
+ return /*#__PURE__*/React.createElement("html", {
76
+ lang: "en"
77
+ }, /*#__PURE__*/React.createElement("head", null, /*#__PURE__*/React.createElement("meta", {
78
+ charSet: "utf-8"
79
+ }), /*#__PURE__*/React.createElement("meta", {
80
+ name: "viewport",
81
+ content: "width=device-width, initial-scale=1"
82
+ }), manifest.assets['umi.css'] && /*#__PURE__*/React.createElement("link", {
83
+ rel: "stylesheet",
84
+ href: manifest.assets['umi.css']
85
+ })), /*#__PURE__*/React.createElement("body", null, /*#__PURE__*/React.createElement("noscript", {
86
+ dangerouslySetInnerHTML: {
87
+ __html: "<b>Enable JavaScript to run this app.</b>"
88
+ }
89
+ }), /*#__PURE__*/React.createElement("div", {
90
+ id: "root"
91
+ }, children), /*#__PURE__*/React.createElement("script", {
92
+ dangerouslySetInnerHTML: {
93
+ __html: "window.__UMI_LOADER_DATA__ = ".concat(JSON.stringify(loaderData))
94
+ }
95
+ })));
107
96
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umijs/renderer-react",
3
- "version": "4.0.0-canary.20220831.1",
3
+ "version": "4.0.0-canary.20220914.1",
4
4
  "description": "@umijs/renderer-react",
5
5
  "homepage": "https://github.com/umijs/umi/tree/master/packages/renderer-react#readme",
6
6
  "bugs": "https://github.com/umijs/umi/issues",