@modern-js/runtime 2.0.0-beta.0 → 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 (204) hide show
  1. package/CHANGELOG.md +77 -0
  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 +63 -46
  5. package/dist/js/modern/core/index.js +3 -2
  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 +1 -1
  20. package/dist/js/modern/router/cli/index.js +0 -16
  21. package/dist/js/modern/router/runtime/plugin.js +0 -9
  22. package/dist/js/modern/router/runtime/plugin.node.js +18 -24
  23. package/dist/js/modern/router/runtime/root/index.js +19 -0
  24. package/dist/js/modern/router/runtime/root/load.js +61 -0
  25. package/dist/js/modern/router/runtime/utils.js +16 -35
  26. package/dist/js/modern/router/runtime/withRouter.js +1 -3
  27. package/dist/js/modern/ssr/cli/index.js +2 -23
  28. package/dist/js/modern/ssr/index.js +23 -34
  29. package/dist/js/modern/ssr/index.node.js +0 -13
  30. package/dist/js/modern/ssr/prefetch.js +0 -7
  31. package/dist/js/modern/ssr/react/prerender/index.js +2 -23
  32. package/dist/js/modern/ssr/react/prerender/util.js +2 -17
  33. package/dist/js/modern/ssr/react/withCallback/index.js +0 -1
  34. package/dist/js/modern/ssr/serverRender/helmet.js +12 -20
  35. package/dist/js/modern/ssr/serverRender/index.js +1 -2
  36. package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -5
  37. package/dist/js/modern/ssr/serverRender/renderToStream/bulidTemplate.before.js +45 -11
  38. package/dist/js/modern/ssr/serverRender/renderToStream/index.js +6 -39
  39. package/dist/js/modern/ssr/serverRender/renderToStream/loadable.js +0 -2
  40. package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.js +26 -15
  41. package/dist/js/modern/ssr/serverRender/renderToStream/template.js +14 -18
  42. package/dist/js/modern/ssr/serverRender/renderToString/entry.js +2 -34
  43. package/dist/js/modern/ssr/serverRender/renderToString/index.js +0 -2
  44. package/dist/js/modern/ssr/serverRender/renderToString/loadable.js +0 -10
  45. package/dist/js/modern/ssr/serverRender/renderToString/reduce.js +0 -2
  46. package/dist/js/modern/ssr/serverRender/renderToString/template.js +0 -15
  47. package/dist/js/modern/ssr/serverRender/renderToString/type.js +0 -1
  48. package/dist/js/modern/ssr/serverRender/utils.js +2 -6
  49. package/dist/js/modern/ssr/utils.js +0 -11
  50. package/dist/js/modern/state/cli/index.js +0 -10
  51. package/dist/js/modern/state/runtime/plugin.js +1 -14
  52. package/dist/js/node/cli/index.js +3 -13
  53. package/dist/js/node/common.js +0 -2
  54. package/dist/js/node/core/app-config.js +2 -5
  55. package/dist/js/node/core/compatible.js +63 -64
  56. package/dist/js/node/core/index.js +0 -16
  57. package/dist/js/node/core/loader/index.js +0 -2
  58. package/dist/js/node/core/loader/loaderManager.js +12 -37
  59. package/dist/js/node/core/loader/useLoader.js +8 -31
  60. package/dist/js/node/core/plugin.js +5 -34
  61. package/dist/js/node/document/Body.js +26 -0
  62. package/dist/js/node/document/DocumentContext.js +14 -0
  63. package/dist/js/node/document/DocumentStructrueContext.js +15 -0
  64. package/dist/js/node/document/Head.js +33 -0
  65. package/dist/js/node/document/Html.js +98 -0
  66. package/dist/js/node/document/Root.js +41 -0
  67. package/dist/js/node/document/Scripts.js +17 -0
  68. package/dist/js/node/document/cli/index.js +140 -0
  69. package/dist/js/node/document/constants.js +36 -0
  70. package/dist/js/node/document/index.js +93 -0
  71. package/dist/js/node/exports/head.js +0 -5
  72. package/dist/js/node/exports/loadable.js +0 -5
  73. package/dist/js/node/exports/server.js +0 -2
  74. package/dist/js/node/exports/styled.js +0 -5
  75. package/dist/js/node/index.js +0 -8
  76. package/dist/js/node/router/cli/index.js +0 -20
  77. package/dist/js/node/router/index.js +0 -4
  78. package/dist/js/node/router/runtime/DefaultNotFound.js +1 -5
  79. package/dist/js/node/router/runtime/index.js +0 -5
  80. package/dist/js/node/router/runtime/plugin.js +0 -17
  81. package/dist/js/node/router/runtime/plugin.node.js +16 -38
  82. package/dist/js/node/router/runtime/root/index.js +26 -0
  83. package/dist/js/node/router/runtime/root/load.js +69 -0
  84. package/dist/js/node/router/runtime/utils.js +16 -44
  85. package/dist/js/node/router/runtime/withRouter.js +0 -9
  86. package/dist/js/node/runtime-context.js +0 -2
  87. package/dist/js/node/ssr/cli/index.js +2 -26
  88. package/dist/js/node/ssr/index.js +23 -45
  89. package/dist/js/node/ssr/index.node.js +0 -23
  90. package/dist/js/node/ssr/prefetch.js +0 -11
  91. package/dist/js/node/ssr/react/index.js +0 -2
  92. package/dist/js/node/ssr/react/nossr/index.js +0 -6
  93. package/dist/js/node/ssr/react/prerender/index.js +2 -30
  94. package/dist/js/node/ssr/react/prerender/util.js +2 -25
  95. package/dist/js/node/ssr/react/withCallback/index.js +1 -4
  96. package/dist/js/node/ssr/serverRender/helmet.js +13 -20
  97. package/dist/js/node/ssr/serverRender/index.js +1 -4
  98. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -9
  99. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.share.js +0 -1
  100. package/dist/js/node/ssr/serverRender/renderToStream/bulidTemplate.before.js +43 -15
  101. package/dist/js/node/ssr/serverRender/renderToStream/index.js +6 -48
  102. package/dist/js/node/ssr/serverRender/renderToStream/loadable.js +0 -4
  103. package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.js +26 -17
  104. package/dist/js/node/ssr/serverRender/renderToStream/styledComponent.js +0 -2
  105. package/dist/js/node/ssr/serverRender/renderToStream/template.js +16 -23
  106. package/dist/js/node/ssr/serverRender/renderToString/entry.js +2 -51
  107. package/dist/js/node/ssr/serverRender/renderToString/index.js +0 -10
  108. package/dist/js/node/ssr/serverRender/renderToString/loadable.js +0 -14
  109. package/dist/js/node/ssr/serverRender/renderToString/reduce.js +0 -3
  110. package/dist/js/node/ssr/serverRender/renderToString/styledComponent.js +0 -3
  111. package/dist/js/node/ssr/serverRender/renderToString/template.js +0 -18
  112. package/dist/js/node/ssr/serverRender/renderToString/type.js +0 -1
  113. package/dist/js/node/ssr/serverRender/types.js +0 -1
  114. package/dist/js/node/ssr/serverRender/utils.js +2 -8
  115. package/dist/js/node/ssr/utils.js +0 -20
  116. package/dist/js/node/state/cli/index.js +0 -15
  117. package/dist/js/node/state/index.js +0 -4
  118. package/dist/js/node/state/plugins.js +0 -11
  119. package/dist/js/node/state/runtime/index.js +0 -7
  120. package/dist/js/node/state/runtime/plugin.js +1 -25
  121. package/dist/js/treeshaking/cli/index.js +3 -3
  122. package/dist/js/treeshaking/core/app-config.js +2 -1
  123. package/dist/js/treeshaking/core/compatible.js +66 -63
  124. package/dist/js/treeshaking/core/index.js +3 -2
  125. package/dist/js/treeshaking/core/loader/loaderManager.js +19 -51
  126. package/dist/js/treeshaking/core/loader/useLoader.js +11 -28
  127. package/dist/js/treeshaking/core/plugin.js +6 -51
  128. package/dist/js/treeshaking/document/Body.js +14 -0
  129. package/dist/js/treeshaking/document/DocumentContext.js +6 -0
  130. package/dist/js/treeshaking/document/DocumentStructrueContext.js +7 -0
  131. package/dist/js/treeshaking/document/Head.js +21 -0
  132. package/dist/js/treeshaking/document/Html.js +104 -0
  133. package/dist/js/treeshaking/document/Root.js +24 -0
  134. package/dist/js/treeshaking/document/Scripts.js +10 -0
  135. package/dist/js/treeshaking/document/cli/index.js +170 -0
  136. package/dist/js/treeshaking/document/constants.js +16 -0
  137. package/dist/js/treeshaking/document/index.js +8 -0
  138. package/dist/js/treeshaking/index.js +1 -1
  139. package/dist/js/treeshaking/router/cli/index.js +6 -18
  140. package/dist/js/treeshaking/router/runtime/plugin.js +5 -13
  141. package/dist/js/treeshaking/router/runtime/plugin.node.js +23 -36
  142. package/dist/js/treeshaking/router/runtime/root/index.js +17 -0
  143. package/dist/js/treeshaking/router/runtime/root/load.js +102 -0
  144. package/dist/js/treeshaking/router/runtime/utils.js +21 -39
  145. package/dist/js/treeshaking/router/runtime/withRouter.js +1 -0
  146. package/dist/js/treeshaking/ssr/cli/index.js +9 -31
  147. package/dist/js/treeshaking/ssr/index.js +26 -40
  148. package/dist/js/treeshaking/ssr/index.node.js +12 -29
  149. package/dist/js/treeshaking/ssr/prefetch.js +0 -13
  150. package/dist/js/treeshaking/ssr/react/nossr/index.js +3 -4
  151. package/dist/js/treeshaking/ssr/react/prerender/index.js +2 -21
  152. package/dist/js/treeshaking/ssr/react/prerender/util.js +3 -20
  153. package/dist/js/treeshaking/ssr/react/withCallback/index.js +1 -2
  154. package/dist/js/treeshaking/ssr/serverRender/helmet.js +12 -11
  155. package/dist/js/treeshaking/ssr/serverRender/index.js +1 -9
  156. package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -6
  157. package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +46 -15
  158. package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +9 -79
  159. package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +3 -5
  160. package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +46 -35
  161. package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +17 -24
  162. package/dist/js/treeshaking/ssr/serverRender/renderToString/entry.js +20 -73
  163. package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +2 -6
  164. package/dist/js/treeshaking/ssr/serverRender/renderToString/loadable.js +5 -16
  165. package/dist/js/treeshaking/ssr/serverRender/renderToString/reduce.js +0 -2
  166. package/dist/js/treeshaking/ssr/serverRender/renderToString/template.js +2 -18
  167. package/dist/js/treeshaking/ssr/serverRender/renderToString/type.js +0 -1
  168. package/dist/js/treeshaking/ssr/serverRender/utils.js +5 -10
  169. package/dist/js/treeshaking/ssr/utils.js +8 -17
  170. package/dist/js/treeshaking/state/cli/index.js +3 -10
  171. package/dist/js/treeshaking/state/runtime/plugin.js +2 -10
  172. package/dist/types/cli/index.d.ts +0 -2
  173. package/dist/types/core/compatible.d.ts +5 -5
  174. package/dist/types/core/index.d.ts +1 -1
  175. package/dist/types/core/loader/loaderManager.d.ts +0 -1
  176. package/dist/types/core/loader/useLoader.d.ts +0 -5
  177. package/dist/types/core/plugin.d.ts +1 -13
  178. package/dist/types/document/Body.d.ts +4 -0
  179. package/dist/types/document/DocumentContext.d.ts +13 -0
  180. package/dist/types/document/DocumentStructrueContext.d.ts +10 -0
  181. package/dist/types/document/Head.d.ts +5 -0
  182. package/dist/types/document/Html.d.ts +4 -0
  183. package/dist/types/document/Root.d.ts +8 -0
  184. package/dist/types/document/Scripts.d.ts +2 -0
  185. package/dist/types/document/cli/index.d.ts +3 -0
  186. package/dist/types/document/constants.d.ts +14 -0
  187. package/dist/types/document/index.d.ts +8 -0
  188. package/dist/types/exports/server.d.ts +3 -3
  189. package/dist/types/index.d.ts +1 -1
  190. package/dist/types/router/cli/index.d.ts +0 -2
  191. package/dist/types/router/runtime/root/index.d.ts +8 -0
  192. package/dist/types/router/runtime/root/load.d.ts +22 -0
  193. package/dist/types/router/runtime/types.d.ts +0 -2
  194. package/dist/types/runtime-context.d.ts +1 -0
  195. package/dist/types/ssr/cli/index.d.ts +0 -2
  196. package/dist/types/ssr/prefetch.d.ts +2 -2
  197. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +3 -2
  198. package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +2 -1
  199. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +3 -3
  200. package/dist/types/ssr/serverRender/renderToStream/template.d.ts +2 -2
  201. package/dist/types/ssr/serverRender/types.d.ts +1 -4
  202. package/dist/types/state/cli/index.d.ts +0 -2
  203. package/dist/types/state/types.d.ts +0 -1
  204. package/package.json +19 -11
@@ -1,9 +1,6 @@
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
4
  import React, { useContext } from 'react';
8
5
  import { unstable_createStaticHandler as createStaticHandler } from '@remix-run/router';
9
6
  import { unstable_createStaticRouter as createStaticRouter, unstable_StaticRouterProvider as StaticRouterProvider } from 'react-router-dom/server';
@@ -11,17 +8,21 @@ import hoistNonReactStatics from 'hoist-non-react-statics';
11
8
  import { installGlobals } from '@remix-run/node';
12
9
  import { createRoutesFromElements } from 'react-router-dom';
13
10
  import { RuntimeReactContext } from "../../core";
14
- import { renderRoutes } from "./utils"; // Polyfill Web Fetch API
11
+ import { renderRoutes } from "./utils";
15
12
 
13
+ // Polyfill Web Fetch API
16
14
  import { jsx as _jsx } from "react/jsx-runtime";
17
- installGlobals(); // TODO: polish
15
+ installGlobals();
18
16
 
17
+ // TODO: polish
19
18
  function createFetchRequest(req) {
20
19
  // const origin = `${req.protocol}://${req.get('host')}`;
21
- const origin = `${req.protocol}://${req.host}`; // Note: This had to take originalUrl into account for presumably vite's proxying
22
-
20
+ const origin = `${req.protocol}://${req.host}`;
21
+ // Note: This had to take originalUrl into account for presumably vite's proxying
23
22
  const url = new URL(req.originalUrl || req.url, origin);
24
- const controller = new AbortController(); // req.on('close', () => {
23
+ const controller = new AbortController();
24
+
25
+ // req.on('close', () => {
25
26
  // controller.abort();
26
27
  // });
27
28
 
@@ -29,16 +30,16 @@ function createFetchRequest(req) {
29
30
  method: req.method,
30
31
  headers: createFetchHeaders(req.headers),
31
32
  signal: controller.signal
32
- }; // if (req.method !== 'GET' && req.method !== 'HEAD') {
33
+ };
34
+
35
+ // if (req.method !== 'GET' && req.method !== 'HEAD') {
33
36
  // init.body = req.body;
34
37
  // }
35
38
 
36
39
  return new Request(url.href, init);
37
40
  }
38
-
39
41
  export function createFetchHeaders(requestHeaders) {
40
42
  const headers = new Headers();
41
-
42
43
  for (const [key, values] of Object.entries(requestHeaders)) {
43
44
  if (values) {
44
45
  if (Array.isArray(values)) {
@@ -50,7 +51,6 @@ export function createFetchHeaders(requestHeaders) {
50
51
  }
51
52
  }
52
53
  }
53
-
54
54
  return headers;
55
55
  }
56
56
  export const routerPlugin = ({
@@ -71,7 +71,6 @@ export const routerPlugin = ({
71
71
  context
72
72
  });
73
73
  }
74
-
75
74
  const {
76
75
  request
77
76
  } = context.ssrContext;
@@ -82,22 +81,21 @@ export const routerPlugin = ({
82
81
  } = createStaticHandler(routes);
83
82
  const remixRequest = createFetchRequest(request);
84
83
  const routerContext = await query(remixRequest);
85
-
86
84
  if (routerContext instanceof Response) {
87
- // TODO: resolve repsonse ?
88
- return next({
89
- context
90
- });
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;
91
88
  }
92
-
93
89
  const router = createStaticRouter(routes, routerContext);
94
90
  context.router = router;
95
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;
96
95
  return next({
97
96
  context
98
97
  });
99
98
  },
100
-
101
99
  hoc: ({
102
100
  App
103
101
  }, next) => {
@@ -108,7 +106,6 @@ export const routerPlugin = ({
108
106
  App
109
107
  });
110
108
  }
111
-
112
109
  const getRouteApp = () => {
113
110
  return props => {
114
111
  const {
@@ -124,15 +121,12 @@ export const routerPlugin = ({
124
121
  }));
125
122
  };
126
123
  };
127
-
128
124
  const RouteApp = getRouteApp();
129
-
130
125
  if (routesConfig.globalApp) {
131
126
  return next({
132
127
  App: hoistNonReactStatics(RouteApp, routesConfig.globalApp)
133
128
  });
134
129
  }
135
-
136
130
  return next({
137
131
  App: RouteApp
138
132
  });
@@ -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
+ }
@@ -1,20 +1,14 @@
1
1
  const _excluded = ["Component"];
2
-
3
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; }
4
-
5
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; }
6
-
7
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; }
8
-
9
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; }
10
-
11
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; }
12
-
13
7
  import React, { Suspense } from 'react';
14
8
  import { Route } from 'react-router-dom';
15
9
  import { DefaultNotFound } from "./DefaultNotFound";
10
+ import { RootLayout } from "./root";
16
11
  import { jsx as _jsx } from "react/jsx-runtime";
17
-
18
12
  const renderNestedRoute = (nestedRoute, parent) => {
19
13
  const {
20
14
  children,
@@ -37,27 +31,33 @@ const renderNestedRoute = (nestedRoute, parent) => {
37
31
  index: nestedRoute.index,
38
32
  errorElement: nestedRoute.errorElement
39
33
  };
40
-
41
34
  if (nestedRoute.error) {
42
35
  const errorElement = /*#__PURE__*/_jsx(nestedRoute.error, {});
43
-
44
36
  routeProps.errorElement = errorElement;
45
37
  }
46
-
38
+ let element;
47
39
  if (Component) {
48
40
  if (parent !== null && parent !== void 0 && parent.loading) {
49
41
  const Loading = parent.loading;
50
- routeProps.element = /*#__PURE__*/_jsx(Suspense, {
42
+ element = /*#__PURE__*/_jsx(Suspense, {
51
43
  fallback: /*#__PURE__*/_jsx(Loading, {}),
52
44
  children: /*#__PURE__*/_jsx(Component, {})
53
45
  });
54
46
  } else {
55
- routeProps.element = /*#__PURE__*/_jsx(Suspense, {
47
+ element = /*#__PURE__*/_jsx(Suspense, {
56
48
  children: /*#__PURE__*/_jsx(Component, {})
57
49
  });
58
50
  }
59
51
  }
60
-
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
61
  const routeElement = index ? /*#__PURE__*/_jsx(Route, _objectSpread(_objectSpread({}, routeProps), {}, {
62
62
  index: true
63
63
  }), id) : /*#__PURE__*/_jsx(Route, _objectSpread(_objectSpread({}, routeProps), {}, {
@@ -66,27 +66,21 @@ const renderNestedRoute = (nestedRoute, parent) => {
66
66
  }), id);
67
67
  return routeElement;
68
68
  };
69
-
70
69
  export function getRouteComponents(routes, globalApp) {
71
70
  const Layout = _ref => {
72
71
  let {
73
- Component
74
- } = _ref,
75
- props = _objectWithoutProperties(_ref, _excluded);
76
-
72
+ Component
73
+ } = _ref,
74
+ props = _objectWithoutProperties(_ref, _excluded);
77
75
  const GlobalLayout = globalApp;
78
-
79
76
  if (!GlobalLayout) {
80
77
  return /*#__PURE__*/_jsx(Component, _objectSpread({}, props));
81
78
  }
82
-
83
79
  return /*#__PURE__*/_jsx(GlobalLayout, _objectSpread({
84
80
  Component: Component
85
81
  }, props));
86
82
  };
87
-
88
83
  const routeElements = [];
89
-
90
84
  for (const route of routes) {
91
85
  if (route.type === 'nested') {
92
86
  const routeElement = renderNestedRoute(route);
@@ -98,11 +92,9 @@ export function getRouteComponents(routes, globalApp) {
98
92
  Component: route.component
99
93
  })
100
94
  }, route.path);
101
-
102
95
  routeElements.push(routeElement);
103
96
  }
104
97
  }
105
-
106
98
  routeElements.push( /*#__PURE__*/_jsx(Route, {
107
99
  path: "*",
108
100
  element: /*#__PURE__*/_jsx(DefaultNotFound, {})
@@ -113,33 +105,27 @@ export function renderRoutes(routesConfig) {
113
105
  if (!routesConfig) {
114
106
  return null;
115
107
  }
116
-
117
108
  const {
118
109
  routes,
119
110
  globalApp
120
111
  } = routesConfig;
121
-
122
112
  if (!routes) {
123
113
  return null;
124
114
  }
125
-
126
115
  const routeElements = getRouteComponents(routes, globalApp);
127
116
  return routeElements;
128
117
  }
129
118
  export function getLocation(serverContext) {
130
119
  var _url$replace;
131
-
132
120
  const {
133
121
  pathname,
134
122
  url
135
123
  } = (serverContext === null || serverContext === void 0 ? void 0 : serverContext.request) || {};
136
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://', '');
137
125
  const index = (cleanUrl || '').indexOf(pathname);
138
-
139
126
  if (index === -1) {
140
127
  return pathname;
141
128
  }
142
-
143
129
  return cleanUrl.substring(index);
144
130
  }
145
131
  export const urlJoin = (...parts) => {
@@ -149,22 +135,17 @@ export const urlJoin = (...parts) => {
149
135
  };
150
136
  export function standardSlash(str) {
151
137
  let addr = str;
152
-
153
138
  if (!addr || typeof addr !== 'string') {
154
139
  return addr;
155
140
  }
156
-
157
141
  if (addr.startsWith('.')) {
158
142
  addr = addr.slice(1);
159
143
  }
160
-
161
144
  if (!addr.startsWith('/')) {
162
145
  addr = `/${addr}`;
163
146
  }
164
-
165
147
  if (addr.endsWith('/') && addr !== '/') {
166
148
  addr = addr.slice(0, addr.length - 1);
167
149
  }
168
-
169
150
  return addr;
170
151
  }
@@ -1,10 +1,8 @@
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
4
  // legacy withRouter
5
+
8
6
  import React from 'react';
9
7
  import { useLocation, useNavigate, useParams } from 'react-router-dom';
10
8
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -1,17 +1,13 @@
1
1
  import { getEntryOptions, SERVER_RENDER_FUNCTION_NAME, LOADABLE_STATS_FILE, isUseSSRBundle, createRuntimeExportsUtils, isSingleEntry } from '@modern-js/utils';
2
2
  const PLUGIN_IDENTIFIER = 'ssr';
3
-
4
3
  const hasStringSSREntry = userConfig => {
5
4
  const isStreaming = ssr => ssr && typeof ssr === 'object' && ssr.mode === 'stream';
6
-
7
5
  const {
8
6
  server
9
7
  } = userConfig;
10
-
11
8
  if (server !== null && server !== void 0 && server.ssr && !isStreaming(server.ssr)) {
12
9
  return true;
13
10
  }
14
-
15
11
  if (server !== null && server !== void 0 && server.ssrByEntries && typeof server.ssrByEntries === 'object') {
16
12
  for (const name of Object.keys(server.ssrByEntries)) {
17
13
  if (!isStreaming(server.ssrByEntries[name])) {
@@ -19,10 +15,8 @@ const hasStringSSREntry = userConfig => {
19
15
  }
20
16
  }
21
17
  }
22
-
23
18
  return false;
24
19
  };
25
-
26
20
  export default (() => ({
27
21
  name: '@modern-js/plugin-ssr',
28
22
  required: ['@modern-js/runtime'],
@@ -45,11 +39,9 @@ export default (() => ({
45
39
  CHAIN_ID
46
40
  }) => {
47
41
  const userConfig = api.useResolvedConfigContext();
48
-
49
42
  if (isUseSSRBundle(userConfig) && name !== 'server' && hasStringSSREntry(userConfig)) {
50
43
  // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
51
44
  const LoadableWebpackPlugin = require('@loadable/webpack-plugin');
52
-
53
45
  chain.plugin(CHAIN_ID.PLUGIN.LOADABLE).use(LoadableWebpackPlugin, [{
54
46
  filename: LOADABLE_STATS_FILE
55
47
  }]);
@@ -57,7 +49,6 @@ export default (() => ({
57
49
  },
58
50
  babel: config => {
59
51
  const userConfig = api.useResolvedConfigContext();
60
-
61
52
  if (isUseSSRBundle(userConfig) && hasStringSSREntry(userConfig)) {
62
53
  config.plugins.push(require.resolve('@loadable/babel-plugin'));
63
54
  }
@@ -65,7 +56,6 @@ export default (() => ({
65
56
  }
66
57
  };
67
58
  },
68
-
69
59
  modifyEntryImports({
70
60
  entrypoint,
71
61
  imports
@@ -79,28 +69,23 @@ export default (() => ({
79
69
  packageName,
80
70
  entrypoints
81
71
  } = api.useAppContext();
82
- pluginsExportsUtils.addExport(`export { default as ssr } from '@modern-js/runtime/ssr'`); // if use ssg then set ssr config to true
72
+ pluginsExportsUtils.addExport(`export { default as ssr } from '@modern-js/runtime/ssr'`);
83
73
 
74
+ // if use ssg then set ssr config to true
84
75
  const ssrConfig = getEntryOptions(entryName, userConfig.server.ssr, userConfig.server.ssrByEntries, packageName);
85
-
86
76
  if (typeof ssrConfig === 'object' && ssrConfig.mode === 'stream') {
87
77
  var _runtimeConfig$router;
88
-
89
78
  const runtimeConfig = getEntryOptions(entryName, userConfig.runtime, userConfig.runtimeByEntries, packageName);
90
-
91
79
  if (runtimeConfig !== null && runtimeConfig !== void 0 && (_runtimeConfig$router = runtimeConfig.router) !== null && _runtimeConfig$router !== void 0 && _runtimeConfig$router.legacy) {
92
80
  throw new Error(`Legacy router plugin doesn't support streaming SSR, check your config 'runtime.router'`);
93
81
  }
94
-
95
82
  if (fileSystemRoutes && !entrypoint.nestedRoutesEntry) {
96
83
  throw new Error(`You should switch to file-system based router to support streaming SSR.`);
97
84
  }
98
85
  }
99
-
100
86
  const ssgConfig = userConfig.output.ssg;
101
87
  const useSSG = isSingleEntry(entrypoints) ? Boolean(ssgConfig) : ssgConfig === true || typeof (ssgConfig === null || ssgConfig === void 0 ? void 0 : ssgConfig[0]) === 'function' || Boolean(ssgConfig === null || ssgConfig === void 0 ? void 0 : ssgConfig[entryName]);
102
88
  ssrConfigMap.set(entryName, ssrConfig || useSSG);
103
-
104
89
  if (ssrConfig || useSSG) {
105
90
  imports.push({
106
91
  value: '@modern-js/runtime/plugins',
@@ -109,13 +94,11 @@ export default (() => ({
109
94
  }]
110
95
  });
111
96
  }
112
-
113
97
  return {
114
98
  entrypoint,
115
99
  imports
116
100
  };
117
101
  },
118
-
119
102
  modifyEntryRuntimePlugins({
120
103
  entrypoint,
121
104
  plugins
@@ -126,13 +109,11 @@ export default (() => ({
126
109
  options: JSON.stringify(ssrConfigMap.get(entrypoint.entryName))
127
110
  });
128
111
  }
129
-
130
112
  return {
131
113
  entrypoint,
132
114
  plugins
133
115
  };
134
116
  },
135
-
136
117
  modifyEntryExport({
137
118
  entrypoint,
138
119
  exportStatement
@@ -145,13 +126,11 @@ export default (() => ({
145
126
  }`, exportStatement].join('\n')
146
127
  };
147
128
  }
148
-
149
129
  return {
150
130
  entrypoint,
151
131
  exportStatement
152
132
  };
153
133
  }
154
-
155
134
  };
156
135
  }
157
136
  }));
@@ -1,9 +1,6 @@
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
4
  import { loadableReady } from '@loadable/component';
8
5
  import hoistNonReactStatics from 'hoist-non-react-statics';
9
6
  import { RenderLevel } from "./serverRender/types";
@@ -21,29 +18,26 @@ export const ssr = config => ({
21
18
  ModernRender,
22
19
  ModernHydrate
23
20
  }) => {
21
+ var _window, _window$_SSR_DATA;
24
22
  const hydrateContext = _objectSpread(_objectSpread({}, context), {}, {
25
23
  _hydration: true
26
24
  });
27
-
28
25
  const callback = () => {
29
26
  // won't cause component re-render because context's reference identity doesn't change
30
27
  delete hydrateContext._hydration;
31
- }; // react streamSSR hydrate
28
+ };
32
29
 
30
+ // if render level not exist, use client render
31
+ const renderLevel = ((_window = window) === null || _window === void 0 ? void 0 : (_window$_SSR_DATA = _window._SSR_DATA) === null || _window$_SSR_DATA === void 0 ? void 0 : _window$_SSR_DATA.renderLevel) || RenderLevel.CLIENT_RENDER;
33
32
 
33
+ // react streamSSR hydrate
34
34
  if (isReact18() && config.mode === 'stream') {
35
35
  return streamSSRHydrate();
36
- } // react stringSSR hydrate
37
-
38
-
36
+ }
37
+ // react stringSSR hydrate
39
38
  return stringSSRHydrate();
40
-
41
39
  function stringSSRHydrate() {
42
- var _window, _window$_SSR_DATA;
43
-
44
- // if render level not exist, use client render
45
- const renderLevel = ((_window = window) === null || _window === void 0 ? void 0 : (_window$_SSR_DATA = _window._SSR_DATA) === null || _window$_SSR_DATA === void 0 ? void 0 : _window$_SSR_DATA.renderLevel) || RenderLevel.CLIENT_RENDER; // client render and server prefetch use same logic
46
-
40
+ // client render and server prefetch use same logic
47
41
  if (renderLevel === RenderLevel.CLIENT_RENDER || renderLevel === RenderLevel.SERVER_PREFETCH) {
48
42
  ModernRender( /*#__PURE__*/_jsx(App, {
49
43
  context: context
@@ -58,7 +52,6 @@ export const ssr = config => ({
58
52
  context: hydrateContext
59
53
  })
60
54
  });
61
-
62
55
  SSRApp = hoistNonReactStatics(SSRApp, App);
63
56
  ModernHydrate( /*#__PURE__*/_jsx(SSRApp, {}));
64
57
  });
@@ -77,28 +70,29 @@ export const ssr = config => ({
77
70
  }));
78
71
  }
79
72
  }
80
-
81
73
  function streamSSRHydrate() {
82
- // callback: https://github.com/reactwg/react-18/discussions/5
83
- let SSRApp = () => /*#__PURE__*/_jsx(WithCallback, {
84
- callback: callback,
85
- children: /*#__PURE__*/_jsx(App, {
86
- context: hydrateContext
87
- })
88
- });
89
-
90
- SSRApp = hoistNonReactStatics(SSRApp, App);
91
- ModernHydrate( /*#__PURE__*/_jsx(SSRApp, {}));
74
+ if (renderLevel === RenderLevel.SERVER_RENDER) {
75
+ // callback: https://github.com/reactwg/react-18/discussions/5
76
+ let SSRApp = () => /*#__PURE__*/_jsx(WithCallback, {
77
+ callback: callback,
78
+ children: /*#__PURE__*/_jsx(App, {
79
+ context: hydrateContext
80
+ })
81
+ });
82
+ SSRApp = hoistNonReactStatics(SSRApp, App);
83
+ ModernHydrate( /*#__PURE__*/_jsx(SSRApp, {}));
84
+ } else {
85
+ ModernRender( /*#__PURE__*/_jsx(App, {
86
+ context: context
87
+ }));
88
+ }
92
89
  }
93
90
  },
94
-
95
91
  init({
96
92
  context
97
93
  }, next) {
98
94
  var _window2, _window2$_SSR_DATA, _window2$_SSR_DATA$co;
99
-
100
95
  const request = (_window2 = window) === null || _window2 === void 0 ? void 0 : (_window2$_SSR_DATA = _window2._SSR_DATA) === null || _window2$_SSR_DATA === void 0 ? void 0 : (_window2$_SSR_DATA$co = _window2$_SSR_DATA.context) === null || _window2$_SSR_DATA$co === void 0 ? void 0 : _window2$_SSR_DATA$co.request;
101
-
102
96
  if (!request) {
103
97
  context.ssrContext = _objectSpread(_objectSpread({}, context.ssrContext), {}, {
104
98
  response: mockResp,
@@ -108,25 +102,21 @@ export const ssr = config => ({
108
102
  context
109
103
  });
110
104
  }
111
-
112
105
  context.ssrContext.response = mockResp;
113
106
  context.ssrContext.request = formatClient(request);
114
107
  return next({
115
108
  context
116
109
  });
117
110
  },
118
-
119
111
  pickContext: ({
120
112
  context,
121
113
  pickedContext
122
114
  }, next) => {
123
115
  var _window3, _window3$_SSR_DATA, _window3$_SSR_DATA$co;
124
-
125
116
  const request = (_window3 = window) === null || _window3 === void 0 ? void 0 : (_window3$_SSR_DATA = _window3._SSR_DATA) === null || _window3$_SSR_DATA === void 0 ? void 0 : (_window3$_SSR_DATA$co = _window3$_SSR_DATA.context) === null || _window3$_SSR_DATA$co === void 0 ? void 0 : _window3$_SSR_DATA$co.request;
126
117
  const {
127
118
  initialData
128
119
  } = context;
129
-
130
120
  if (!request) {
131
121
  return next({
132
122
  context,
@@ -135,7 +125,6 @@ export const ssr = config => ({
135
125
  })
136
126
  });
137
127
  }
138
-
139
128
  return next({
140
129
  context,
141
130
  pickedContext: _objectSpread(_objectSpread({}, pickedContext), {}, {
@@ -1,14 +1,8 @@
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 { registerPrefetch } from "../core";
8
- import prefetch from "./prefetch";
9
4
  import { formatServer } from "./utils";
10
5
  import render from "./serverRender";
11
- const registeredApps = new WeakSet();
12
6
  export const ssr = (config = {}) => ({
13
7
  name: '@modern-js/plugin-ssr',
14
8
  setup: () => {
@@ -17,11 +11,6 @@ export const ssr = (config = {}) => ({
17
11
  App,
18
12
  context
19
13
  }) => {
20
- if (!registeredApps.has(App)) {
21
- registerPrefetch(App, _context => prefetch(App, _context));
22
- registeredApps.add(App);
23
- }
24
-
25
14
  const html = await render({
26
15
  context: context,
27
16
  App: App,
@@ -29,7 +18,6 @@ export const ssr = (config = {}) => ({
29
18
  });
30
19
  return html;
31
20
  },
32
-
33
21
  init({
34
22
  context
35
23
  }, next) {
@@ -41,7 +29,6 @@ export const ssr = (config = {}) => ({
41
29
  context
42
30
  });
43
31
  },
44
-
45
32
  pickContext: ({
46
33
  context,
47
34
  pickedContext