@modern-js/runtime 1.21.5 → 2.0.0-beta.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.
Files changed (256) hide show
  1. package/CHANGELOG.md +117 -18
  2. package/dist/js/modern/cli/index.js +3 -5
  3. package/dist/js/modern/core/app-config.js +2 -1
  4. package/dist/js/modern/core/compatible.js +47 -48
  5. package/dist/js/modern/core/index.js +4 -3
  6. package/dist/js/modern/core/loader/loaderManager.js +12 -34
  7. package/dist/js/modern/core/loader/useLoader.js +8 -26
  8. package/dist/js/modern/core/plugin.js +6 -28
  9. package/dist/js/modern/document/Body.js +17 -0
  10. package/dist/js/modern/document/DocumentContext.js +6 -0
  11. package/dist/js/modern/document/DocumentStructrueContext.js +7 -0
  12. package/dist/js/modern/document/Head.js +24 -0
  13. package/dist/js/modern/document/Html.js +92 -0
  14. package/dist/js/modern/document/Root.js +31 -0
  15. package/dist/js/modern/document/Scripts.js +10 -0
  16. package/dist/js/modern/document/cli/index.js +130 -0
  17. package/dist/js/modern/document/constants.js +19 -0
  18. package/dist/js/modern/document/index.js +8 -0
  19. package/dist/js/modern/index.js +2 -1
  20. package/dist/js/modern/router/cli/index.js +20 -20
  21. package/dist/js/modern/router/runtime/index.js +1 -1
  22. package/dist/js/modern/router/runtime/plugin.js +25 -52
  23. package/dist/js/modern/router/runtime/plugin.node.js +137 -0
  24. package/dist/js/modern/router/runtime/root/index.js +19 -0
  25. package/dist/js/modern/router/runtime/root/load.js +61 -0
  26. package/dist/js/modern/router/runtime/types.js +1 -0
  27. package/dist/js/modern/router/runtime/utils.js +99 -58
  28. package/dist/js/modern/router/runtime/withRouter.js +20 -0
  29. package/dist/js/modern/runtime-context.js +2 -1
  30. package/dist/js/modern/ssr/cli/index.js +35 -17
  31. package/dist/js/modern/ssr/index.js +64 -51
  32. package/dist/js/modern/ssr/index.node.js +6 -15
  33. package/dist/js/modern/ssr/prefetch.js +0 -7
  34. package/dist/js/modern/ssr/react/prerender/index.js +2 -23
  35. package/dist/js/modern/ssr/react/prerender/util.js +2 -17
  36. package/dist/js/modern/ssr/react/withCallback/index.js +0 -1
  37. package/dist/js/modern/ssr/serverRender/helmet.js +12 -20
  38. package/dist/js/modern/ssr/serverRender/index.js +12 -27
  39. package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.after.js +38 -0
  40. package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.share.js +5 -0
  41. package/dist/js/modern/ssr/serverRender/renderToStream/bulidTemplate.before.js +58 -0
  42. package/dist/js/modern/ssr/serverRender/renderToStream/index.js +40 -0
  43. package/dist/js/modern/ssr/serverRender/renderToStream/loadable.js +24 -0
  44. package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.js +72 -0
  45. package/dist/js/modern/ssr/serverRender/renderToStream/styledComponent.js +11 -0
  46. package/dist/js/modern/ssr/serverRender/renderToStream/template.js +18 -0
  47. package/dist/js/modern/ssr/serverRender/renderToStream/type.js +0 -0
  48. package/dist/js/modern/ssr/serverRender/{entry.js → renderToString/entry.js} +6 -40
  49. package/dist/js/modern/ssr/serverRender/renderToString/index.js +29 -0
  50. package/dist/js/modern/ssr/serverRender/{loadable.js → renderToString/loadable.js} +2 -24
  51. package/dist/js/modern/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -2
  52. package/dist/js/modern/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -0
  53. package/dist/js/modern/ssr/serverRender/{template.js → renderToString/template.js} +0 -15
  54. package/dist/js/modern/ssr/serverRender/{type.js → renderToString/type.js} +0 -2
  55. package/dist/js/modern/ssr/serverRender/types.js +2 -0
  56. package/dist/js/modern/ssr/serverRender/utils.js +20 -0
  57. package/dist/js/modern/ssr/utils.js +8 -13
  58. package/dist/js/modern/state/cli/index.js +0 -10
  59. package/dist/js/modern/state/runtime/plugin.js +1 -14
  60. package/dist/js/node/cli/index.js +3 -13
  61. package/dist/js/node/common.js +0 -2
  62. package/dist/js/node/core/app-config.js +2 -5
  63. package/dist/js/node/core/compatible.js +47 -66
  64. package/dist/js/node/core/index.js +8 -17
  65. package/dist/js/node/core/loader/index.js +0 -2
  66. package/dist/js/node/core/loader/loaderManager.js +12 -37
  67. package/dist/js/node/core/loader/useLoader.js +8 -31
  68. package/dist/js/node/core/plugin.js +5 -34
  69. package/dist/js/node/document/Body.js +26 -0
  70. package/dist/js/node/document/DocumentContext.js +14 -0
  71. package/dist/js/node/document/DocumentStructrueContext.js +15 -0
  72. package/dist/js/node/document/Head.js +33 -0
  73. package/dist/js/node/document/Html.js +98 -0
  74. package/dist/js/node/document/Root.js +41 -0
  75. package/dist/js/node/document/Scripts.js +17 -0
  76. package/dist/js/node/document/cli/index.js +140 -0
  77. package/dist/js/node/document/constants.js +36 -0
  78. package/dist/js/node/document/index.js +93 -0
  79. package/dist/js/node/exports/head.js +0 -5
  80. package/dist/js/node/exports/loadable.js +0 -5
  81. package/dist/js/node/exports/server.js +0 -2
  82. package/dist/js/node/exports/styled.js +0 -5
  83. package/dist/js/node/index.js +5 -5
  84. package/dist/js/node/router/cli/index.js +20 -24
  85. package/dist/js/node/router/index.js +0 -4
  86. package/dist/js/node/router/runtime/DefaultNotFound.js +1 -5
  87. package/dist/js/node/router/runtime/index.js +4 -9
  88. package/dist/js/node/router/runtime/plugin.js +23 -65
  89. package/dist/js/node/router/runtime/plugin.node.js +147 -0
  90. package/dist/js/node/router/runtime/root/index.js +26 -0
  91. package/dist/js/node/router/runtime/root/load.js +69 -0
  92. package/dist/js/node/router/runtime/types.js +5 -0
  93. package/dist/js/node/router/runtime/utils.js +101 -67
  94. package/dist/js/node/router/runtime/withRouter.js +26 -0
  95. package/dist/js/node/runtime-context.js +4 -4
  96. package/dist/js/node/ssr/cli/index.js +35 -21
  97. package/dist/js/node/ssr/index.js +63 -62
  98. package/dist/js/node/ssr/index.node.js +6 -25
  99. package/dist/js/node/ssr/prefetch.js +0 -11
  100. package/dist/js/node/ssr/react/index.js +0 -2
  101. package/dist/js/node/ssr/react/nossr/index.js +0 -6
  102. package/dist/js/node/ssr/react/prerender/index.js +2 -30
  103. package/dist/js/node/ssr/react/prerender/util.js +2 -25
  104. package/dist/js/node/ssr/react/withCallback/index.js +1 -4
  105. package/dist/js/node/ssr/serverRender/helmet.js +13 -20
  106. package/dist/js/node/ssr/serverRender/index.js +14 -39
  107. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.after.js +45 -0
  108. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.share.js +13 -0
  109. package/dist/js/node/ssr/serverRender/renderToStream/bulidTemplate.before.js +65 -0
  110. package/dist/js/node/ssr/serverRender/renderToStream/index.js +48 -0
  111. package/dist/js/node/ssr/serverRender/renderToStream/loadable.js +30 -0
  112. package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.js +79 -0
  113. package/dist/js/node/ssr/serverRender/renderToStream/styledComponent.js +17 -0
  114. package/dist/js/node/ssr/serverRender/renderToStream/template.js +25 -0
  115. package/dist/js/node/ssr/serverRender/renderToStream/type.js +0 -0
  116. package/dist/js/node/ssr/serverRender/{entry.js → renderToString/entry.js} +13 -64
  117. package/dist/js/node/ssr/serverRender/renderToString/index.js +37 -0
  118. package/dist/js/node/ssr/serverRender/{loadable.js → renderToString/loadable.js} +3 -28
  119. package/dist/js/node/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -3
  120. package/dist/js/node/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -3
  121. package/dist/js/node/ssr/serverRender/{template.js → renderToString/template.js} +0 -18
  122. package/dist/js/node/ssr/serverRender/{type.js → renderToString/type.js} +0 -2
  123. package/dist/js/node/ssr/serverRender/types.js +12 -0
  124. package/dist/js/node/ssr/serverRender/utils.js +28 -0
  125. package/dist/js/node/ssr/utils.js +10 -21
  126. package/dist/js/node/state/cli/index.js +0 -15
  127. package/dist/js/node/state/index.js +0 -4
  128. package/dist/js/node/state/plugins.js +0 -11
  129. package/dist/js/node/state/runtime/index.js +0 -7
  130. package/dist/js/node/state/runtime/plugin.js +1 -25
  131. package/dist/js/treeshaking/cli/index.js +3 -3
  132. package/dist/js/treeshaking/core/app-config.js +2 -1
  133. package/dist/js/treeshaking/core/compatible.js +50 -65
  134. package/dist/js/treeshaking/core/index.js +4 -3
  135. package/dist/js/treeshaking/core/loader/loaderManager.js +19 -51
  136. package/dist/js/treeshaking/core/loader/useLoader.js +11 -28
  137. package/dist/js/treeshaking/core/plugin.js +6 -51
  138. package/dist/js/treeshaking/document/Body.js +14 -0
  139. package/dist/js/treeshaking/document/DocumentContext.js +6 -0
  140. package/dist/js/treeshaking/document/DocumentStructrueContext.js +7 -0
  141. package/dist/js/treeshaking/document/Head.js +21 -0
  142. package/dist/js/treeshaking/document/Html.js +104 -0
  143. package/dist/js/treeshaking/document/Root.js +24 -0
  144. package/dist/js/treeshaking/document/Scripts.js +10 -0
  145. package/dist/js/treeshaking/document/cli/index.js +170 -0
  146. package/dist/js/treeshaking/document/constants.js +16 -0
  147. package/dist/js/treeshaking/document/index.js +8 -0
  148. package/dist/js/treeshaking/index.js +2 -1
  149. package/dist/js/treeshaking/router/cli/index.js +26 -22
  150. package/dist/js/treeshaking/router/runtime/index.js +1 -1
  151. package/dist/js/treeshaking/router/runtime/plugin.js +28 -54
  152. package/dist/js/treeshaking/router/runtime/plugin.node.js +161 -0
  153. package/dist/js/treeshaking/router/runtime/root/index.js +17 -0
  154. package/dist/js/treeshaking/router/runtime/root/load.js +102 -0
  155. package/dist/js/treeshaking/router/runtime/types.js +1 -0
  156. package/dist/js/treeshaking/router/runtime/utils.js +104 -58
  157. package/dist/js/treeshaking/router/runtime/withRouter.js +18 -0
  158. package/dist/js/treeshaking/runtime-context.js +2 -1
  159. package/dist/js/treeshaking/ssr/cli/index.js +43 -23
  160. package/dist/js/treeshaking/ssr/index.js +74 -59
  161. package/dist/js/treeshaking/ssr/index.node.js +18 -31
  162. package/dist/js/treeshaking/ssr/prefetch.js +0 -13
  163. package/dist/js/treeshaking/ssr/react/nossr/index.js +3 -4
  164. package/dist/js/treeshaking/ssr/react/prerender/index.js +2 -21
  165. package/dist/js/treeshaking/ssr/react/prerender/util.js +3 -20
  166. package/dist/js/treeshaking/ssr/react/withCallback/index.js +1 -2
  167. package/dist/js/treeshaking/ssr/serverRender/helmet.js +12 -11
  168. package/dist/js/treeshaking/ssr/serverRender/index.js +33 -55
  169. package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.after.js +32 -0
  170. package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.share.js +7 -0
  171. package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +60 -0
  172. package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +50 -0
  173. package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +22 -0
  174. package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +68 -0
  175. package/dist/js/treeshaking/ssr/serverRender/renderToStream/styledComponent.js +10 -0
  176. package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +22 -0
  177. package/dist/js/treeshaking/ssr/serverRender/renderToStream/type.js +0 -0
  178. package/dist/js/treeshaking/ssr/serverRender/{entry.js → renderToString/entry.js} +23 -76
  179. package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +44 -0
  180. package/dist/js/treeshaking/ssr/serverRender/{loadable.js → renderToString/loadable.js} +7 -34
  181. package/dist/js/treeshaking/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -2
  182. package/dist/js/treeshaking/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -0
  183. package/dist/js/treeshaking/ssr/serverRender/{template.js → renderToString/template.js} +2 -18
  184. package/dist/js/treeshaking/ssr/serverRender/{type.js → renderToString/type.js} +0 -2
  185. package/dist/js/treeshaking/ssr/serverRender/types.js +2 -0
  186. package/dist/js/treeshaking/ssr/serverRender/utils.js +28 -0
  187. package/dist/js/treeshaking/ssr/utils.js +20 -17
  188. package/dist/js/treeshaking/state/cli/index.js +3 -10
  189. package/dist/js/treeshaking/state/runtime/plugin.js +2 -10
  190. package/dist/types/cli/index.d.ts +0 -2
  191. package/dist/types/common.d.ts +0 -2
  192. package/dist/types/core/compatible.d.ts +2 -2
  193. package/dist/types/core/index.d.ts +2 -2
  194. package/dist/types/core/loader/loaderManager.d.ts +0 -1
  195. package/dist/types/core/loader/useLoader.d.ts +0 -5
  196. package/dist/types/core/plugin.d.ts +2 -14
  197. package/dist/types/document/Body.d.ts +4 -0
  198. package/dist/types/document/DocumentContext.d.ts +13 -0
  199. package/dist/types/document/DocumentStructrueContext.d.ts +10 -0
  200. package/dist/types/document/Head.d.ts +5 -0
  201. package/dist/types/document/Html.d.ts +4 -0
  202. package/dist/types/document/Root.d.ts +8 -0
  203. package/dist/types/document/Scripts.d.ts +2 -0
  204. package/dist/types/document/cli/index.d.ts +3 -0
  205. package/dist/types/document/constants.d.ts +14 -0
  206. package/dist/types/document/index.d.ts +8 -0
  207. package/dist/types/exports/server.d.ts +21 -1
  208. package/dist/types/index.d.ts +2 -1
  209. package/dist/types/router/cli/index.d.ts +0 -2
  210. package/dist/types/router/runtime/DefaultNotFound.d.ts +1 -0
  211. package/dist/types/router/runtime/index.d.ts +3 -3
  212. package/dist/types/router/runtime/plugin.d.ts +2 -45
  213. package/dist/types/router/runtime/plugin.node.d.ts +8 -0
  214. package/dist/types/router/runtime/root/index.d.ts +8 -0
  215. package/dist/types/router/runtime/root/load.d.ts +22 -0
  216. package/dist/types/router/runtime/types.d.ts +36 -0
  217. package/dist/types/router/runtime/utils.d.ts +5 -2
  218. package/dist/types/router/runtime/withRouter.d.ts +8 -0
  219. package/dist/types/runtime-context.d.ts +3 -1
  220. package/dist/types/ssr/cli/index.d.ts +0 -2
  221. package/dist/types/ssr/index.d.ts +2 -2
  222. package/dist/types/ssr/index.node.d.ts +1 -1
  223. package/dist/types/ssr/prefetch.d.ts +2 -2
  224. package/dist/types/ssr/react/nossr/index.d.ts +3 -1
  225. package/dist/types/ssr/serverRender/index.d.ts +2 -3
  226. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +7 -0
  227. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.share.d.ts +3 -0
  228. package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +2 -0
  229. package/dist/types/ssr/serverRender/renderToStream/index.d.ts +6 -0
  230. package/dist/types/ssr/serverRender/renderToStream/loadable.d.ts +16 -0
  231. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +8 -0
  232. package/dist/types/ssr/serverRender/renderToStream/styledComponent.d.ts +12 -0
  233. package/dist/types/ssr/serverRender/renderToStream/template.d.ts +3 -0
  234. package/dist/types/ssr/serverRender/renderToStream/type.d.ts +4 -0
  235. package/dist/types/ssr/serverRender/{entry.d.ts → renderToString/entry.d.ts} +2 -2
  236. package/dist/types/ssr/serverRender/renderToString/index.d.ts +6 -0
  237. package/dist/types/ssr/serverRender/{loadable.d.ts → renderToString/loadable.d.ts} +0 -0
  238. package/dist/types/ssr/serverRender/{reduce.d.ts → renderToString/reduce.d.ts} +0 -0
  239. package/dist/types/ssr/serverRender/{styledComponent.d.ts → renderToString/styledComponent.d.ts} +0 -0
  240. package/dist/types/ssr/serverRender/{template.d.ts → renderToString/template.d.ts} +0 -0
  241. package/dist/types/ssr/serverRender/{type.d.ts → renderToString/type.d.ts} +1 -8
  242. package/dist/types/ssr/serverRender/types.d.ts +15 -0
  243. package/dist/types/ssr/serverRender/utils.d.ts +3 -0
  244. package/dist/types/ssr/utils.d.ts +4 -2
  245. package/dist/types/state/cli/index.d.ts +0 -2
  246. package/dist/types/state/runtime/plugin.d.ts +1 -1
  247. package/dist/types/state/types.d.ts +0 -1
  248. package/package.json +63 -71
  249. package/types/index.d.ts +13 -0
  250. package/types/router.d.ts +14 -0
  251. package/dist/js/modern/ssr/serverRender/measure.js +0 -11
  252. package/dist/js/node/ssr/serverRender/measure.js +0 -20
  253. package/dist/js/treeshaking/ssr/serverRender/measure.js +0 -17
  254. package/dist/types/ssr/serverRender/measure.d.ts +0 -1
  255. package/lib/types.d.ts +0 -10
  256. package/type.d.ts +0 -5
@@ -1,28 +1,18 @@
1
1
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
-
3
2
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
-
5
3
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
-
7
- import React, { useContext } from 'react';
8
- import { createBrowserHistory, createHashHistory } from 'history';
9
- import { Router, StaticRouter } from 'react-router-dom';
4
+ import React from 'react';
5
+ import { createBrowserRouter, createHashRouter, RouterProvider, createRoutesFromElements } from 'react-router-dom';
10
6
  import hoistNonReactStatics from 'hoist-non-react-statics';
11
- import { RuntimeReactContext } from "../../core";
12
- import { isBrowser } from "../../common";
13
- import { renderRoutes, getLocation, urlJoin } from "./utils";
7
+ import { renderRoutes } from "./utils";
14
8
  import { jsx as _jsx } from "react/jsx-runtime";
15
9
  export const routerPlugin = ({
16
10
  serverBase: _serverBase = [],
17
- history: customHistory,
18
11
  supportHtml5History: _supportHtml5History = true,
19
12
  routesConfig,
20
- historyOptions: _historyOptions = {}
13
+ createRoutes
21
14
  }) => {
22
- const isBrow = isBrowser();
23
-
24
15
  const select = pathname => _serverBase.find(baseUrl => pathname.search(baseUrl) === 0) || '/';
25
-
26
16
  return {
27
17
  name: '@modern-js/plugin-router',
28
18
  setup: () => {
@@ -30,54 +20,37 @@ export const routerPlugin = ({
30
20
  hoc: ({
31
21
  App
32
22
  }, next) => {
23
+ // can not get routes config, skip wrapping React Router.
24
+ // e.g. App.tsx as the entrypoint
25
+ if (!routesConfig) {
26
+ return next({
27
+ App
28
+ });
29
+ }
33
30
  const getRouteApp = () => {
34
- if (isBrow) {
31
+ return props => {
35
32
  var _window$_SERVER_DATA;
36
-
33
+ const routeElements = renderRoutes(routesConfig);
34
+ const routes = createRoutes ? createRoutes() : createRoutesFromElements(routeElements);
37
35
  const baseUrl = ((_window$_SERVER_DATA = window._SERVER_DATA) === null || _window$_SERVER_DATA === void 0 ? void 0 : _window$_SERVER_DATA.router.baseUrl) || select(location.pathname);
38
- _historyOptions.basename = baseUrl === '/' ? urlJoin(baseUrl, _historyOptions.basename) : baseUrl;
39
- const history = customHistory || (_supportHtml5History ? createBrowserHistory(_historyOptions) : createHashHistory(_historyOptions));
40
- return props => /*#__PURE__*/_jsx(Router, {
41
- history: history,
42
- children: /*#__PURE__*/_jsx(App, _objectSpread(_objectSpread({}, props), {}, {
43
- children: routesConfig ? renderRoutes(routesConfig, props) : null
44
- }))
45
- });
46
- }
47
-
48
- return props => {
49
- const runtimeContext = useContext(RuntimeReactContext);
50
- const {
51
- ssrContext
52
- } = runtimeContext;
53
- const location = getLocation(ssrContext);
54
- const routerContext = (ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.redirection) || {};
55
- const request = ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.request;
56
- const baseUrl = request === null || request === void 0 ? void 0 : request.baseUrl;
57
- const basename = baseUrl === '/' ? urlJoin(baseUrl, _historyOptions.basename) : baseUrl;
58
- return /*#__PURE__*/_jsx(StaticRouter, {
59
- basename: basename === '/' ? '' : basename,
60
- location: location,
61
- context: routerContext,
62
- children: /*#__PURE__*/_jsx(App, _objectSpread(_objectSpread({}, props), {}, {
63
- children: routesConfig ? renderRoutes(routesConfig, props) : null
64
- }))
36
+ const router = _supportHtml5History ? createBrowserRouter(routes, {
37
+ basename: baseUrl
38
+ }) : createHashRouter(routes, {
39
+ basename: baseUrl
65
40
  });
41
+ return /*#__PURE__*/_jsx(App, _objectSpread(_objectSpread({}, props), {}, {
42
+ children: /*#__PURE__*/_jsx(RouterProvider, {
43
+ router: router
44
+ })
45
+ }));
66
46
  };
67
47
  };
68
-
69
- let RouteApp = getRouteApp();
70
-
71
- if (App) {
72
- RouteApp = hoistNonReactStatics(RouteApp, App);
73
- }
74
-
75
- if (routesConfig !== null && routesConfig !== void 0 && routesConfig.globalApp) {
48
+ const RouteApp = getRouteApp();
49
+ if (routesConfig.globalApp) {
76
50
  return next({
77
51
  App: hoistNonReactStatics(RouteApp, routesConfig.globalApp)
78
52
  });
79
53
  }
80
-
81
54
  return next({
82
55
  App: RouteApp
83
56
  });
@@ -0,0 +1,137 @@
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ import React, { useContext } from 'react';
5
+ import { unstable_createStaticHandler as createStaticHandler } from '@remix-run/router';
6
+ import { unstable_createStaticRouter as createStaticRouter, unstable_StaticRouterProvider as StaticRouterProvider } from 'react-router-dom/server';
7
+ import hoistNonReactStatics from 'hoist-non-react-statics';
8
+ import { installGlobals } from '@remix-run/node';
9
+ import { createRoutesFromElements } from 'react-router-dom';
10
+ import { RuntimeReactContext } from "../../core";
11
+ import { renderRoutes } from "./utils";
12
+
13
+ // Polyfill Web Fetch API
14
+ import { jsx as _jsx } from "react/jsx-runtime";
15
+ installGlobals();
16
+
17
+ // TODO: polish
18
+ function createFetchRequest(req) {
19
+ // const origin = `${req.protocol}://${req.get('host')}`;
20
+ const origin = `${req.protocol}://${req.host}`;
21
+ // Note: This had to take originalUrl into account for presumably vite's proxying
22
+ const url = new URL(req.originalUrl || req.url, origin);
23
+ const controller = new AbortController();
24
+
25
+ // req.on('close', () => {
26
+ // controller.abort();
27
+ // });
28
+
29
+ const init = {
30
+ method: req.method,
31
+ headers: createFetchHeaders(req.headers),
32
+ signal: controller.signal
33
+ };
34
+
35
+ // if (req.method !== 'GET' && req.method !== 'HEAD') {
36
+ // init.body = req.body;
37
+ // }
38
+
39
+ return new Request(url.href, init);
40
+ }
41
+ export function createFetchHeaders(requestHeaders) {
42
+ const headers = new Headers();
43
+ for (const [key, values] of Object.entries(requestHeaders)) {
44
+ if (values) {
45
+ if (Array.isArray(values)) {
46
+ for (const value of values) {
47
+ headers.append(key, value);
48
+ }
49
+ } else {
50
+ headers.set(key, values);
51
+ }
52
+ }
53
+ }
54
+ return headers;
55
+ }
56
+ export const routerPlugin = ({
57
+ routesConfig,
58
+ createRoutes
59
+ }) => {
60
+ return {
61
+ name: '@modern-js/plugin-router',
62
+ setup: () => {
63
+ return {
64
+ async init({
65
+ context
66
+ }, next) {
67
+ // can not get routes config, skip wrapping React Router.
68
+ // e.g. App.tsx as the entrypoint
69
+ if (!routesConfig) {
70
+ return next({
71
+ context
72
+ });
73
+ }
74
+ const {
75
+ request
76
+ } = context.ssrContext;
77
+ const routeElements = renderRoutes(routesConfig);
78
+ const routes = createRoutes ? createRoutes() : createRoutesFromElements(routeElements);
79
+ const {
80
+ query
81
+ } = createStaticHandler(routes);
82
+ const remixRequest = createFetchRequest(request);
83
+ const routerContext = await query(remixRequest);
84
+ if (routerContext instanceof Response) {
85
+ // React Router would return a Response when redirects occur in loader.
86
+ // Throw the Response to bail out and let the server handle it with an HTTP redirect
87
+ return routerContext;
88
+ }
89
+ const router = createStaticRouter(routes, routerContext);
90
+ context.router = router;
91
+ context.routerContext = routerContext;
92
+ context.routes = routes;
93
+ // set routeManifest in context to be consistent with csr context
94
+ context.routeManifest = context.ssrContext.routeManifest;
95
+ return next({
96
+ context
97
+ });
98
+ },
99
+ hoc: ({
100
+ App
101
+ }, next) => {
102
+ // can not get routes config, skip wrapping React Router.
103
+ // e.g. App.tsx as the entrypoint
104
+ if (!routesConfig) {
105
+ return next({
106
+ App
107
+ });
108
+ }
109
+ const getRouteApp = () => {
110
+ return props => {
111
+ const {
112
+ router,
113
+ routerContext
114
+ } = useContext(RuntimeReactContext);
115
+ return /*#__PURE__*/_jsx(App, _objectSpread(_objectSpread({}, props), {}, {
116
+ children: /*#__PURE__*/_jsx(StaticRouterProvider, {
117
+ router: router,
118
+ context: routerContext,
119
+ nonce: "the-nonce"
120
+ })
121
+ }));
122
+ };
123
+ };
124
+ const RouteApp = getRouteApp();
125
+ if (routesConfig.globalApp) {
126
+ return next({
127
+ App: hoistNonReactStatics(RouteApp, routesConfig.globalApp)
128
+ });
129
+ }
130
+ return next({
131
+ App: RouteApp
132
+ });
133
+ }
134
+ };
135
+ }
136
+ };
137
+ };
@@ -0,0 +1,19 @@
1
+ import React, { useContext, useEffect } from 'react';
2
+ import { useLocation } from 'react-router-dom';
3
+ import { RuntimeReactContext } from "../../../core";
4
+ import { handleLoad } from "./load";
5
+ import { Fragment as _Fragment } from "react/jsx-runtime";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ export function RootLayout(props) {
8
+ const location = useLocation();
9
+ const context = useContext(RuntimeReactContext);
10
+ useEffect(() => {
11
+ const {
12
+ routes
13
+ } = props;
14
+ handleLoad(routes, location, context.routeManifest);
15
+ }, [location]);
16
+ return /*#__PURE__*/_jsx(_Fragment, {
17
+ children: props.children
18
+ });
19
+ }
@@ -0,0 +1,61 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ import { matchRoutes } from 'react-router-dom';
3
+ class Logger {
4
+ static getLogger(options) {
5
+ if (this.logger) {
6
+ return this.logger;
7
+ }
8
+ this.logger = new Logger(options);
9
+ return this.logger;
10
+ }
11
+ constructor(options) {
12
+ _defineProperty(this, "enableLogging", void 0);
13
+ this.enableLogging = options.enableLogging;
14
+ }
15
+ log(...args) {
16
+ if (this.enableLogging) {
17
+ // eslint-disable-next-line no-console
18
+ console.log(...args);
19
+ }
20
+ }
21
+ }
22
+ _defineProperty(Logger, "logger", void 0);
23
+ export function handleLoad(routes, location, routeManifest) {
24
+ if (!routeManifest || !routeManifest.enableFetchParallel === false) {
25
+ return;
26
+ }
27
+ const {
28
+ routeAssets
29
+ } = routeManifest;
30
+ Logger.getLogger({
31
+ enableLogging: routeManifest.enableLogging
32
+ }).log('handle page load');
33
+ const matches = matchClientRoutes(routes, location);
34
+ matches === null || matches === void 0 ? void 0 : matches.forEach(match => loadRouteModule(match.route, routeAssets));
35
+ }
36
+ export function matchClientRoutes(routes, location) {
37
+ const matches = matchRoutes(routes, location);
38
+ return matches;
39
+ }
40
+ export async function loadRouteModule(route, routeAssets) {
41
+ const routeId = route.id;
42
+ if (!routeId) {
43
+ return;
44
+ }
45
+ if (!routeAssets[routeId]) {
46
+ return;
47
+ }
48
+ const {
49
+ chunkIds
50
+ } = routeAssets[routeId];
51
+ if (!chunkIds) {
52
+ return;
53
+ }
54
+ try {
55
+ await Promise.all(chunkIds.map(chunkId => {
56
+ return __webpack_chunk_load__(String(chunkId));
57
+ }));
58
+ } catch (error) {
59
+ console.error(error);
60
+ }
61
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,85 +1,131 @@
1
1
  const _excluded = ["Component"];
2
-
2
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
3
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
3
4
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
-
5
5
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
-
7
6
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
-
9
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
10
-
11
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
12
-
13
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
14
- import React from 'react';
15
- import { Route, matchPath } from 'react-router-dom';
7
+ import React, { Suspense } from 'react';
8
+ import { Route } from 'react-router-dom';
16
9
  import { DefaultNotFound } from "./DefaultNotFound";
10
+ import { RootLayout } from "./root";
17
11
  import { jsx as _jsx } from "react/jsx-runtime";
18
- export function renderRoutes(routesConfig, extraProps = {}) {
12
+ const renderNestedRoute = (nestedRoute, parent) => {
13
+ const {
14
+ children,
15
+ index,
16
+ id,
17
+ component: Component
18
+ } = nestedRoute;
19
+ const childElements = children === null || children === void 0 ? void 0 : children.map(childRoute => {
20
+ return renderNestedRoute(childRoute, nestedRoute);
21
+ });
22
+ const routeProps = {
23
+ caseSensitive: nestedRoute.caseSensitive,
24
+ path: nestedRoute.path,
25
+ id: nestedRoute.id,
26
+ loader: nestedRoute.loader,
27
+ action: nestedRoute.action,
28
+ hasErrorBoundary: nestedRoute.hasErrorBoundary,
29
+ shouldRevalidate: nestedRoute.shouldRevalidate,
30
+ handle: nestedRoute.handle,
31
+ index: nestedRoute.index,
32
+ errorElement: nestedRoute.errorElement
33
+ };
34
+ if (nestedRoute.error) {
35
+ const errorElement = /*#__PURE__*/_jsx(nestedRoute.error, {});
36
+ routeProps.errorElement = errorElement;
37
+ }
38
+ let element;
39
+ if (Component) {
40
+ if (parent !== null && parent !== void 0 && parent.loading) {
41
+ const Loading = parent.loading;
42
+ element = /*#__PURE__*/_jsx(Suspense, {
43
+ fallback: /*#__PURE__*/_jsx(Loading, {}),
44
+ children: /*#__PURE__*/_jsx(Component, {})
45
+ });
46
+ } else {
47
+ element = /*#__PURE__*/_jsx(Suspense, {
48
+ children: /*#__PURE__*/_jsx(Component, {})
49
+ });
50
+ }
51
+ }
52
+ if (!parent) {
53
+ element = /*#__PURE__*/_jsx(RootLayout, {
54
+ routes: [nestedRoute],
55
+ children: /*#__PURE__*/_jsx(Suspense, {
56
+ children: element
57
+ })
58
+ });
59
+ }
60
+ routeProps.element = element;
61
+ const routeElement = index ? /*#__PURE__*/_jsx(Route, _objectSpread(_objectSpread({}, routeProps), {}, {
62
+ index: true
63
+ }), id) : /*#__PURE__*/_jsx(Route, _objectSpread(_objectSpread({}, routeProps), {}, {
64
+ index: false,
65
+ children: childElements
66
+ }), id);
67
+ return routeElement;
68
+ };
69
+ export function getRouteComponents(routes, globalApp) {
19
70
  const Layout = _ref => {
20
71
  let {
21
- Component
22
- } = _ref,
23
- props = _objectWithoutProperties(_ref, _excluded);
24
-
25
- const GlobalLayout = routesConfig === null || routesConfig === void 0 ? void 0 : routesConfig.globalApp;
26
-
72
+ Component
73
+ } = _ref,
74
+ props = _objectWithoutProperties(_ref, _excluded);
75
+ const GlobalLayout = globalApp;
27
76
  if (!GlobalLayout) {
28
77
  return /*#__PURE__*/_jsx(Component, _objectSpread({}, props));
29
78
  }
30
-
31
79
  return /*#__PURE__*/_jsx(GlobalLayout, _objectSpread({
32
80
  Component: Component
33
81
  }, props));
34
82
  };
35
-
36
- const findMatchedRoute = pathname => {
37
- var _routesConfig$routes;
38
-
39
- return routesConfig === null || routesConfig === void 0 ? void 0 : (_routesConfig$routes = routesConfig.routes) === null || _routesConfig$routes === void 0 ? void 0 : _routesConfig$routes.find(route => {
40
- const info = matchPath(pathname, {
83
+ const routeElements = [];
84
+ for (const route of routes) {
85
+ if (route.type === 'nested') {
86
+ const routeElement = renderNestedRoute(route);
87
+ routeElements.push(routeElement);
88
+ } else {
89
+ const routeElement = /*#__PURE__*/_jsx(Route, {
41
90
  path: route.path,
42
- exact: route.exact,
43
- sensitive: route.sensitive
44
- });
45
- return Boolean(info);
46
- });
47
- };
48
-
49
- return /*#__PURE__*/_jsx(Route, {
50
- path: "/",
51
- render: props => {
52
- const matchedRoute = findMatchedRoute(props.location.pathname);
53
-
54
- if (!matchedRoute) {
55
- return /*#__PURE__*/_jsx(DefaultNotFound, {});
56
- }
57
-
58
- return /*#__PURE__*/_jsx(Route, {
59
- path: matchedRoute.path,
60
- exact: matchedRoute.exact,
61
- sensitive: matchedRoute.sensitive,
62
- render: routeProps => /*#__PURE__*/_jsx(Layout, _objectSpread(_objectSpread({
63
- Component: matchedRoute.component
64
- }, routeProps), extraProps))
65
- });
91
+ element: /*#__PURE__*/_jsx(Layout, {
92
+ Component: route.component
93
+ })
94
+ }, route.path);
95
+ routeElements.push(routeElement);
66
96
  }
67
- });
97
+ }
98
+ routeElements.push( /*#__PURE__*/_jsx(Route, {
99
+ path: "*",
100
+ element: /*#__PURE__*/_jsx(DefaultNotFound, {})
101
+ }, "*"));
102
+ return routeElements;
103
+ }
104
+ export function renderRoutes(routesConfig) {
105
+ if (!routesConfig) {
106
+ return null;
107
+ }
108
+ const {
109
+ routes,
110
+ globalApp
111
+ } = routesConfig;
112
+ if (!routes) {
113
+ return null;
114
+ }
115
+ const routeElements = getRouteComponents(routes, globalApp);
116
+ return routeElements;
68
117
  }
69
118
  export function getLocation(serverContext) {
70
119
  var _url$replace;
71
-
72
120
  const {
73
121
  pathname,
74
122
  url
75
123
  } = (serverContext === null || serverContext === void 0 ? void 0 : serverContext.request) || {};
76
124
  const cleanUrl = url === null || url === void 0 ? void 0 : (_url$replace = url.replace('http://', '')) === null || _url$replace === void 0 ? void 0 : _url$replace.replace('https://', '');
77
125
  const index = (cleanUrl || '').indexOf(pathname);
78
-
79
126
  if (index === -1) {
80
127
  return pathname;
81
128
  }
82
-
83
129
  return cleanUrl.substring(index);
84
130
  }
85
131
  export const urlJoin = (...parts) => {
@@ -89,22 +135,17 @@ export const urlJoin = (...parts) => {
89
135
  };
90
136
  export function standardSlash(str) {
91
137
  let addr = str;
92
-
93
138
  if (!addr || typeof addr !== 'string') {
94
139
  return addr;
95
140
  }
96
-
97
141
  if (addr.startsWith('.')) {
98
142
  addr = addr.slice(1);
99
143
  }
100
-
101
144
  if (!addr.startsWith('/')) {
102
145
  addr = `/${addr}`;
103
146
  }
104
-
105
147
  if (addr.endsWith('/') && addr !== '/') {
106
148
  addr = addr.slice(0, addr.length - 1);
107
149
  }
108
-
109
150
  return addr;
110
151
  }
@@ -0,0 +1,20 @@
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ // legacy withRouter
5
+
6
+ import React from 'react';
7
+ import { useLocation, useNavigate, useParams } from 'react-router-dom';
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ export const withRouter = Component => {
10
+ return props => {
11
+ const location = useLocation();
12
+ const params = useParams();
13
+ const navigate = useNavigate();
14
+ return /*#__PURE__*/_jsx(Component, _objectSpread(_objectSpread({}, props), {}, {
15
+ location: location,
16
+ params: params,
17
+ navigate: navigate
18
+ }));
19
+ };
20
+ };
@@ -1,2 +1,3 @@
1
1
  import { createContext } from 'react';
2
- export const RuntimeReactContext = /*#__PURE__*/createContext({});
2
+ export const RuntimeReactContext = /*#__PURE__*/createContext({});
3
+ export const ServerRouterContext = /*#__PURE__*/createContext({});