@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
@@ -5,13 +5,13 @@ var _excluded = ["Component"];
5
5
  import React, { Suspense } from 'react';
6
6
  import { Route } from 'react-router-dom';
7
7
  import { DefaultNotFound } from "./DefaultNotFound";
8
+ import { RootLayout } from "./root";
8
9
  import { jsx as _jsx } from "react/jsx-runtime";
9
-
10
10
  var renderNestedRoute = function renderNestedRoute(nestedRoute, parent) {
11
11
  var children = nestedRoute.children,
12
- index = nestedRoute.index,
13
- id = nestedRoute.id,
14
- Component = nestedRoute.component;
12
+ index = nestedRoute.index,
13
+ id = nestedRoute.id,
14
+ Component = nestedRoute.component;
15
15
  var childElements = children === null || children === void 0 ? void 0 : children.map(function (childRoute) {
16
16
  return renderNestedRoute(childRoute, nestedRoute);
17
17
  });
@@ -27,27 +27,33 @@ var renderNestedRoute = function renderNestedRoute(nestedRoute, parent) {
27
27
  index: nestedRoute.index,
28
28
  errorElement: nestedRoute.errorElement
29
29
  };
30
-
31
30
  if (nestedRoute.error) {
32
31
  var errorElement = /*#__PURE__*/_jsx(nestedRoute.error, {});
33
-
34
32
  routeProps.errorElement = errorElement;
35
33
  }
36
-
34
+ var element;
37
35
  if (Component) {
38
36
  if (parent !== null && parent !== void 0 && parent.loading) {
39
37
  var Loading = parent.loading;
40
- routeProps.element = /*#__PURE__*/_jsx(Suspense, {
38
+ element = /*#__PURE__*/_jsx(Suspense, {
41
39
  fallback: /*#__PURE__*/_jsx(Loading, {}),
42
40
  children: /*#__PURE__*/_jsx(Component, {})
43
41
  });
44
42
  } else {
45
- routeProps.element = /*#__PURE__*/_jsx(Suspense, {
43
+ element = /*#__PURE__*/_jsx(Suspense, {
46
44
  children: /*#__PURE__*/_jsx(Component, {})
47
45
  });
48
46
  }
49
47
  }
50
-
48
+ if (!parent) {
49
+ element = /*#__PURE__*/_jsx(RootLayout, {
50
+ routes: [nestedRoute],
51
+ children: /*#__PURE__*/_jsx(Suspense, {
52
+ children: element
53
+ })
54
+ });
55
+ }
56
+ routeProps.element = element;
51
57
  var routeElement = index ? /*#__PURE__*/_jsx(Route, _objectSpread(_objectSpread({}, routeProps), {}, {
52
58
  index: true
53
59
  }), id) : /*#__PURE__*/_jsx(Route, _objectSpread(_objectSpread({}, routeProps), {}, {
@@ -56,32 +62,24 @@ var renderNestedRoute = function renderNestedRoute(nestedRoute, parent) {
56
62
  }), id);
57
63
  return routeElement;
58
64
  };
59
-
60
65
  export function getRouteComponents(routes, globalApp) {
61
66
  var Layout = function Layout(_ref) {
62
67
  var Component = _ref.Component,
63
- props = _objectWithoutProperties(_ref, _excluded);
64
-
68
+ props = _objectWithoutProperties(_ref, _excluded);
65
69
  var GlobalLayout = globalApp;
66
-
67
70
  if (!GlobalLayout) {
68
71
  return /*#__PURE__*/_jsx(Component, _objectSpread({}, props));
69
72
  }
70
-
71
73
  return /*#__PURE__*/_jsx(GlobalLayout, _objectSpread({
72
74
  Component: Component
73
75
  }, props));
74
76
  };
75
-
76
77
  var routeElements = [];
77
-
78
78
  var _iterator = _createForOfIteratorHelper(routes),
79
- _step;
80
-
79
+ _step;
81
80
  try {
82
81
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
83
82
  var route = _step.value;
84
-
85
83
  if (route.type === 'nested') {
86
84
  var routeElement = renderNestedRoute(route);
87
85
  routeElements.push(routeElement);
@@ -92,7 +90,6 @@ export function getRouteComponents(routes, globalApp) {
92
90
  Component: route.component
93
91
  })
94
92
  }, route.path);
95
-
96
93
  routeElements.push(_routeElement);
97
94
  }
98
95
  }
@@ -101,7 +98,6 @@ export function getRouteComponents(routes, globalApp) {
101
98
  } finally {
102
99
  _iterator.f();
103
100
  }
104
-
105
101
  routeElements.push( /*#__PURE__*/_jsx(Route, {
106
102
  path: "*",
107
103
  element: /*#__PURE__*/_jsx(DefaultNotFound, {})
@@ -112,61 +108,47 @@ export function renderRoutes(routesConfig) {
112
108
  if (!routesConfig) {
113
109
  return null;
114
110
  }
115
-
116
111
  var routes = routesConfig.routes,
117
- globalApp = routesConfig.globalApp;
118
-
112
+ globalApp = routesConfig.globalApp;
119
113
  if (!routes) {
120
114
  return null;
121
115
  }
122
-
123
116
  var routeElements = getRouteComponents(routes, globalApp);
124
117
  return routeElements;
125
118
  }
126
119
  export function getLocation(serverContext) {
127
120
  var _url$replace;
128
-
129
121
  var _ref2 = (serverContext === null || serverContext === void 0 ? void 0 : serverContext.request) || {},
130
- pathname = _ref2.pathname,
131
- url = _ref2.url;
132
-
122
+ pathname = _ref2.pathname,
123
+ url = _ref2.url;
133
124
  var cleanUrl = url === null || url === void 0 ? void 0 : (_url$replace = url.replace('http://', '')) === null || _url$replace === void 0 ? void 0 : _url$replace.replace('https://', '');
134
125
  var index = (cleanUrl || '').indexOf(pathname);
135
-
136
126
  if (index === -1) {
137
127
  return pathname;
138
128
  }
139
-
140
129
  return cleanUrl.substring(index);
141
130
  }
142
131
  export var urlJoin = function urlJoin() {
143
132
  var separator = '/';
144
133
  var replace = new RegExp("".concat(separator, "{1,}"), 'g');
145
-
146
134
  for (var _len = arguments.length, parts = new Array(_len), _key = 0; _key < _len; _key++) {
147
135
  parts[_key] = arguments[_key];
148
136
  }
149
-
150
137
  return standardSlash(parts.join(separator).replace(replace, separator));
151
138
  };
152
139
  export function standardSlash(str) {
153
140
  var addr = str;
154
-
155
141
  if (!addr || typeof addr !== 'string') {
156
142
  return addr;
157
143
  }
158
-
159
144
  if (addr.startsWith('.')) {
160
145
  addr = addr.slice(1);
161
146
  }
162
-
163
147
  if (!addr.startsWith('/')) {
164
148
  addr = "/".concat(addr);
165
149
  }
166
-
167
150
  if (addr.endsWith('/') && addr !== '/') {
168
151
  addr = addr.slice(0, addr.length - 1);
169
152
  }
170
-
171
153
  return addr;
172
154
  }
@@ -1,5 +1,6 @@
1
1
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
2
  // legacy withRouter
3
+
3
4
  import React from 'react';
4
5
  import { useLocation, useNavigate, useParams } from 'react-router-dom';
5
6
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -1,31 +1,24 @@
1
1
  import _typeof from "@babel/runtime/helpers/esm/typeof";
2
2
  import { getEntryOptions, SERVER_RENDER_FUNCTION_NAME, LOADABLE_STATS_FILE, isUseSSRBundle, createRuntimeExportsUtils, isSingleEntry } from '@modern-js/utils';
3
3
  var PLUGIN_IDENTIFIER = 'ssr';
4
-
5
4
  var hasStringSSREntry = function hasStringSSREntry(userConfig) {
6
5
  var isStreaming = function isStreaming(ssr) {
7
6
  return ssr && _typeof(ssr) === 'object' && ssr.mode === 'stream';
8
7
  };
9
-
10
8
  var server = userConfig.server;
11
-
12
9
  if (server !== null && server !== void 0 && server.ssr && !isStreaming(server.ssr)) {
13
10
  return true;
14
11
  }
15
-
16
12
  if (server !== null && server !== void 0 && server.ssrByEntries && _typeof(server.ssrByEntries) === 'object') {
17
13
  for (var _i = 0, _Object$keys = Object.keys(server.ssrByEntries); _i < _Object$keys.length; _i++) {
18
14
  var name = _Object$keys[_i];
19
-
20
15
  if (!isStreaming(server.ssrByEntries[name])) {
21
16
  return true;
22
17
  }
23
18
  }
24
19
  }
25
-
26
20
  return false;
27
21
  };
28
-
29
22
  export default (function () {
30
23
  return {
31
24
  name: '@modern-js/plugin-ssr',
@@ -46,13 +39,11 @@ export default (function () {
46
39
  tools: {
47
40
  webpackChain: function webpackChain(chain, _ref) {
48
41
  var name = _ref.name,
49
- CHAIN_ID = _ref.CHAIN_ID;
42
+ CHAIN_ID = _ref.CHAIN_ID;
50
43
  var userConfig = api.useResolvedConfigContext();
51
-
52
44
  if (isUseSSRBundle(userConfig) && name !== 'server' && hasStringSSREntry(userConfig)) {
53
45
  // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
54
46
  var LoadableWebpackPlugin = require('@loadable/webpack-plugin');
55
-
56
47
  chain.plugin(CHAIN_ID.PLUGIN.LOADABLE).use(LoadableWebpackPlugin, [{
57
48
  filename: LOADABLE_STATS_FILE
58
49
  }]);
@@ -60,7 +51,6 @@ export default (function () {
60
51
  },
61
52
  babel: function babel(config) {
62
53
  var userConfig = api.useResolvedConfigContext();
63
-
64
54
  if (isUseSSRBundle(userConfig) && hasStringSSREntry(userConfig)) {
65
55
  config.plugins.push(require.resolve('@loadable/babel-plugin'));
66
56
  }
@@ -70,37 +60,30 @@ export default (function () {
70
60
  },
71
61
  modifyEntryImports: function modifyEntryImports(_ref2) {
72
62
  var entrypoint = _ref2.entrypoint,
73
- imports = _ref2.imports;
63
+ imports = _ref2.imports;
74
64
  var entryName = entrypoint.entryName,
75
- fileSystemRoutes = entrypoint.fileSystemRoutes;
65
+ fileSystemRoutes = entrypoint.fileSystemRoutes;
76
66
  var userConfig = api.useResolvedConfigContext();
77
-
78
67
  var _api$useAppContext = api.useAppContext(),
79
- packageName = _api$useAppContext.packageName,
80
- entrypoints = _api$useAppContext.entrypoints;
81
-
82
- pluginsExportsUtils.addExport("export { default as ssr } from '@modern-js/runtime/ssr'"); // if use ssg then set ssr config to true
68
+ packageName = _api$useAppContext.packageName,
69
+ entrypoints = _api$useAppContext.entrypoints;
70
+ pluginsExportsUtils.addExport("export { default as ssr } from '@modern-js/runtime/ssr'");
83
71
 
72
+ // if use ssg then set ssr config to true
84
73
  var ssrConfig = getEntryOptions(entryName, userConfig.server.ssr, userConfig.server.ssrByEntries, packageName);
85
-
86
74
  if (_typeof(ssrConfig) === 'object' && ssrConfig.mode === 'stream') {
87
75
  var _runtimeConfig$router;
88
-
89
76
  var runtimeConfig = getEntryOptions(entryName, userConfig.runtime, userConfig.runtimeByEntries, packageName);
90
-
91
77
  if (runtimeConfig !== null && runtimeConfig !== void 0 && (_runtimeConfig$router = runtimeConfig.router) !== null && _runtimeConfig$router !== void 0 && _runtimeConfig$router.legacy) {
92
78
  throw new Error("Legacy router plugin doesn't support streaming SSR, check your config 'runtime.router'");
93
79
  }
94
-
95
80
  if (fileSystemRoutes && !entrypoint.nestedRoutesEntry) {
96
81
  throw new Error("You should switch to file-system based router to support streaming SSR.");
97
82
  }
98
83
  }
99
-
100
84
  var ssgConfig = userConfig.output.ssg;
101
85
  var 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
86
  ssrConfigMap.set(entryName, ssrConfig || useSSG);
103
-
104
87
  if (ssrConfig || useSSG) {
105
88
  imports.push({
106
89
  value: '@modern-js/runtime/plugins',
@@ -109,7 +92,6 @@ export default (function () {
109
92
  }]
110
93
  });
111
94
  }
112
-
113
95
  return {
114
96
  entrypoint: entrypoint,
115
97
  imports: imports
@@ -117,15 +99,13 @@ export default (function () {
117
99
  },
118
100
  modifyEntryRuntimePlugins: function modifyEntryRuntimePlugins(_ref3) {
119
101
  var entrypoint = _ref3.entrypoint,
120
- plugins = _ref3.plugins;
121
-
102
+ plugins = _ref3.plugins;
122
103
  if (ssrConfigMap.get(entrypoint.entryName)) {
123
104
  plugins.push({
124
105
  name: PLUGIN_IDENTIFIER,
125
106
  options: JSON.stringify(ssrConfigMap.get(entrypoint.entryName))
126
107
  });
127
108
  }
128
-
129
109
  return {
130
110
  entrypoint: entrypoint,
131
111
  plugins: plugins
@@ -133,15 +113,13 @@ export default (function () {
133
113
  },
134
114
  modifyEntryExport: function modifyEntryExport(_ref4) {
135
115
  var entrypoint = _ref4.entrypoint,
136
- exportStatement = _ref4.exportStatement;
137
-
116
+ exportStatement = _ref4.exportStatement;
138
117
  if (ssrConfigMap.get(entrypoint.entryName)) {
139
118
  return {
140
119
  entrypoint: entrypoint,
141
120
  exportStatement: ["export function ".concat(SERVER_RENDER_FUNCTION_NAME, "(context) {\n return bootstrap(AppWrapper, context)\n }"), exportStatement].join('\n')
142
121
  };
143
122
  }
144
-
145
123
  return {
146
124
  entrypoint: entrypoint,
147
125
  exportStatement: exportStatement
@@ -15,32 +15,33 @@ export var ssr = function ssr(config) {
15
15
  return {
16
16
  client: function () {
17
17
  var _client = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
18
- var App, context, ModernRender, ModernHydrate, hydrateContext, callback, stringSSRHydrate, streamSSRHydrate;
18
+ var _window, _window$_SSR_DATA;
19
+ var App, context, ModernRender, ModernHydrate, hydrateContext, callback, renderLevel, stringSSRHydrate, streamSSRHydrate;
19
20
  return _regeneratorRuntime().wrap(function _callee$(_context) {
20
21
  while (1) {
21
22
  switch (_context.prev = _context.next) {
22
23
  case 0:
23
24
  streamSSRHydrate = function _streamSSRHydrate() {
24
- // callback: https://github.com/reactwg/react-18/discussions/5
25
- var SSRApp = function SSRApp() {
26
- return /*#__PURE__*/_jsx(WithCallback, {
27
- callback: callback,
28
- children: /*#__PURE__*/_jsx(App, {
29
- context: hydrateContext
30
- })
31
- });
32
- };
33
-
34
- SSRApp = hoistNonReactStatics(SSRApp, App);
35
- ModernHydrate( /*#__PURE__*/_jsx(SSRApp, {}));
25
+ if (renderLevel === RenderLevel.SERVER_RENDER) {
26
+ // callback: https://github.com/reactwg/react-18/discussions/5
27
+ var SSRApp = function SSRApp() {
28
+ return /*#__PURE__*/_jsx(WithCallback, {
29
+ callback: callback,
30
+ children: /*#__PURE__*/_jsx(App, {
31
+ context: hydrateContext
32
+ })
33
+ });
34
+ };
35
+ SSRApp = hoistNonReactStatics(SSRApp, App);
36
+ ModernHydrate( /*#__PURE__*/_jsx(SSRApp, {}));
37
+ } else {
38
+ ModernRender( /*#__PURE__*/_jsx(App, {
39
+ context: context
40
+ }));
41
+ }
36
42
  };
37
-
38
43
  stringSSRHydrate = function _stringSSRHydrate() {
39
- var _window, _window$_SSR_DATA;
40
-
41
- // if render level not exist, use client render
42
- var 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
43
-
44
+ // client render and server prefetch use same logic
44
45
  if (renderLevel === RenderLevel.CLIENT_RENDER || renderLevel === RenderLevel.SERVER_PREFETCH) {
45
46
  ModernRender( /*#__PURE__*/_jsx(App, {
46
47
  context: context
@@ -57,7 +58,6 @@ export var ssr = function ssr(config) {
57
58
  })
58
59
  });
59
60
  };
60
-
61
61
  SSRApp = hoistNonReactStatics(SSRApp, App);
62
62
  ModernHydrate( /*#__PURE__*/_jsx(SSRApp, {}));
63
63
  });
@@ -76,48 +76,38 @@ export var ssr = function ssr(config) {
76
76
  }));
77
77
  }
78
78
  };
79
-
80
79
  App = _ref.App, context = _ref.context, ModernRender = _ref.ModernRender, ModernHydrate = _ref.ModernHydrate;
81
80
  hydrateContext = _objectSpread(_objectSpread({}, context), {}, {
82
81
  _hydration: true
83
82
  });
84
-
85
83
  callback = function callback() {
86
84
  // won't cause component re-render because context's reference identity doesn't change
87
85
  delete hydrateContext._hydration;
88
- }; // react streamSSR hydrate
89
-
90
-
86
+ }; // if render level not exist, use client render
87
+ 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; // react streamSSR hydrate
91
88
  if (!(isReact18() && config.mode === 'stream')) {
92
- _context.next = 7;
89
+ _context.next = 8;
93
90
  break;
94
91
  }
95
-
96
92
  return _context.abrupt("return", streamSSRHydrate());
97
-
98
- case 7:
99
- return _context.abrupt("return", stringSSRHydrate());
100
-
101
93
  case 8:
94
+ return _context.abrupt("return", stringSSRHydrate());
95
+ case 9:
102
96
  case "end":
103
97
  return _context.stop();
104
98
  }
105
99
  }
106
100
  }, _callee);
107
101
  }));
108
-
109
102
  function client(_x) {
110
103
  return _client.apply(this, arguments);
111
104
  }
112
-
113
105
  return client;
114
106
  }(),
115
107
  init: function init(_ref2, next) {
116
108
  var _window2, _window2$_SSR_DATA, _window2$_SSR_DATA$co;
117
-
118
109
  var context = _ref2.context;
119
110
  var 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;
120
-
121
111
  if (!request) {
122
112
  context.ssrContext = _objectSpread(_objectSpread({}, context.ssrContext), {}, {
123
113
  response: mockResp,
@@ -127,7 +117,6 @@ export var ssr = function ssr(config) {
127
117
  context: context
128
118
  });
129
119
  }
130
-
131
120
  context.ssrContext.response = mockResp;
132
121
  context.ssrContext.request = formatClient(request);
133
122
  return next({
@@ -136,12 +125,10 @@ export var ssr = function ssr(config) {
136
125
  },
137
126
  pickContext: function pickContext(_ref3, next) {
138
127
  var _window3, _window3$_SSR_DATA, _window3$_SSR_DATA$co;
139
-
140
128
  var context = _ref3.context,
141
- pickedContext = _ref3.pickedContext;
129
+ pickedContext = _ref3.pickedContext;
142
130
  var 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;
143
131
  var initialData = context.initialData;
144
-
145
132
  if (!request) {
146
133
  return next({
147
134
  context: context,
@@ -150,7 +137,6 @@ export var ssr = function ssr(config) {
150
137
  })
151
138
  });
152
139
  }
153
-
154
140
  return next({
155
141
  context: context,
156
142
  pickedContext: _objectSpread(_objectSpread({}, pickedContext), {}, {
@@ -1,11 +1,8 @@
1
1
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
2
  import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
3
3
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
4
- import { registerPrefetch } from "../core";
5
- import prefetch from "./prefetch";
6
4
  import { formatServer } from "./utils";
7
5
  import render from "./serverRender";
8
- var registeredApps = new WeakSet();
9
6
  export var ssr = function ssr() {
10
7
  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
11
8
  return {
@@ -15,48 +12,36 @@ export var ssr = function ssr() {
15
12
  server: function () {
16
13
  var _server = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
17
14
  var App, context, html;
18
- return _regeneratorRuntime().wrap(function _callee$(_context2) {
15
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
19
16
  while (1) {
20
- switch (_context2.prev = _context2.next) {
17
+ switch (_context.prev = _context.next) {
21
18
  case 0:
22
19
  App = _ref.App, context = _ref.context;
23
-
24
- if (!registeredApps.has(App)) {
25
- registerPrefetch(App, function (_context) {
26
- return prefetch(App, _context);
27
- });
28
- registeredApps.add(App);
29
- }
30
-
31
- _context2.next = 4;
20
+ _context.next = 3;
32
21
  return render({
33
22
  context: context,
34
23
  App: App,
35
24
  config: config
36
25
  });
37
-
38
- case 4:
39
- html = _context2.sent;
40
- return _context2.abrupt("return", html);
41
-
42
- case 6:
26
+ case 3:
27
+ html = _context.sent;
28
+ return _context.abrupt("return", html);
29
+ case 5:
43
30
  case "end":
44
- return _context2.stop();
31
+ return _context.stop();
45
32
  }
46
33
  }
47
34
  }, _callee);
48
35
  }));
49
-
50
36
  function server(_x) {
51
37
  return _server.apply(this, arguments);
52
38
  }
53
-
54
39
  return server;
55
40
  }(),
56
41
  init: function init(_ref2, next) {
57
42
  var context = _ref2.context;
58
43
  var _ref3 = context.ssrContext,
59
- request = _ref3.request;
44
+ request = _ref3.request;
60
45
  context.ssrContext.request = formatServer(request);
61
46
  return next({
62
47
  context: context
@@ -64,13 +49,11 @@ export var ssr = function ssr() {
64
49
  },
65
50
  pickContext: function pickContext(_ref4, next) {
66
51
  var context = _ref4.context,
67
- pickedContext = _ref4.pickedContext;
68
-
52
+ pickedContext = _ref4.pickedContext;
69
53
  // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain
70
54
  var _ref5 = context === null || context === void 0 ? void 0 : context.ssrContext,
71
- request = _ref5.request,
72
- response = _ref5.response;
73
-
55
+ request = _ref5.request,
56
+ response = _ref5.response;
74
57
  var initialData = context.initialData;
75
58
  return next({
76
59
  context: context,
@@ -4,7 +4,6 @@ import { renderToStaticMarkup } from 'react-dom/server';
4
4
  import { run } from '@modern-js/utils/ssr';
5
5
  import { ChunkExtractor } from '@loadable/server';
6
6
  import { jsx as _jsx } from "react/jsx-runtime";
7
-
8
7
  // todo: SSRContext
9
8
  var prefetch = /*#__PURE__*/function () {
10
9
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(App, context) {
@@ -14,16 +13,13 @@ var prefetch = /*#__PURE__*/function () {
14
13
  case 0:
15
14
  return _context2.abrupt("return", run(context.ssrContext.request.headers, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
16
15
  var _context$store;
17
-
18
16
  var ssrContext, _ref3, loadableStats, extractor, loadersData;
19
-
20
17
  return _regeneratorRuntime().wrap(function _callee$(_context) {
21
18
  while (1) {
22
19
  switch (_context.prev = _context.next) {
23
20
  case 0:
24
21
  ssrContext = context.ssrContext;
25
22
  _ref3 = ssrContext, loadableStats = _ref3.loadableStats;
26
-
27
23
  if (loadableStats) {
28
24
  extractor = new ChunkExtractor({
29
25
  stats: loadableStats,
@@ -37,26 +33,21 @@ var prefetch = /*#__PURE__*/function () {
37
33
  context: context
38
34
  }));
39
35
  }
40
-
41
36
  if (context.loaderManager.hasPendingLoaders()) {
42
37
  _context.next = 5;
43
38
  break;
44
39
  }
45
-
46
40
  return _context.abrupt("return", {
47
41
  initialData: context.initialData,
48
42
  i18nData: context.__i18nData__
49
43
  });
50
-
51
44
  case 5:
52
45
  _context.next = 7;
53
46
  return context.loaderManager.awaitPendingLoaders();
54
-
55
47
  case 7:
56
48
  loadersData = _context.sent;
57
49
  Object.keys(loadersData).forEach(function (id) {
58
50
  var data = loadersData[id];
59
-
60
51
  if (data._error) {
61
52
  ssrContext.logger.error('App Prefetch Loader', data._error);
62
53
  ssrContext.metrics.emitCounter('app.prefetch.loader.error', 1);
@@ -70,7 +61,6 @@ var prefetch = /*#__PURE__*/function () {
70
61
  // todo: move to plugin state
71
62
  storeState: context === null || context === void 0 ? void 0 : (_context$store = context.store) === null || _context$store === void 0 ? void 0 : _context$store.getState()
72
63
  });
73
-
74
64
  case 10:
75
65
  case "end":
76
66
  return _context.stop();
@@ -78,7 +68,6 @@ var prefetch = /*#__PURE__*/function () {
78
68
  }
79
69
  }, _callee);
80
70
  }))));
81
-
82
71
  case 1:
83
72
  case "end":
84
73
  return _context2.stop();
@@ -86,10 +75,8 @@ var prefetch = /*#__PURE__*/function () {
86
75
  }
87
76
  }, _callee2);
88
77
  }));
89
-
90
78
  return function prefetch(_x, _x2) {
91
79
  return _ref.apply(this, arguments);
92
80
  };
93
81
  }();
94
-
95
82
  export default prefetch;
@@ -3,10 +3,9 @@ import React, { useEffect, useState } from 'react';
3
3
  var csr = false;
4
4
  export var NoSSR = function NoSSR(props) {
5
5
  var _useState = useState(csr),
6
- _useState2 = _slicedToArray(_useState, 2),
7
- isMounted = _useState2[0],
8
- setMounted = _useState2[1];
9
-
6
+ _useState2 = _slicedToArray(_useState, 2),
7
+ isMounted = _useState2[0],
8
+ setMounted = _useState2[1];
10
9
  useEffect(function () {
11
10
  csr = true;
12
11
  setMounted(true);