@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
@@ -3,12 +3,11 @@ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
3
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
4
4
  import { loadableReady } from '@loadable/component';
5
5
  import hoistNonReactStatics from 'hoist-non-react-statics';
6
- import { RenderLevel } from "./serverRender/type";
6
+ import { RenderLevel } from "./serverRender/types";
7
7
  import { WithCallback } from "./react/withCallback";
8
- import { formatClient, mockResponse } from "./utils";
8
+ import { formatClient, mockResponse, isReact18 } from "./utils";
9
9
  import { jsx as _jsx } from "react/jsx-runtime";
10
- var IS_REACT18 = process.env.IS_REACT18 === 'true';
11
- export var ssr = function ssr(_) {
10
+ export var ssr = function ssr(config) {
12
11
  return {
13
12
  name: '@modern-js/plugin-ssr',
14
13
  setup: function setup() {
@@ -17,78 +16,98 @@ export var ssr = function ssr(_) {
17
16
  client: function () {
18
17
  var _client = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
19
18
  var _window, _window$_SSR_DATA;
20
-
21
- var App, context, ModernRender, ModernHydrate, renderLevel;
19
+ var App, context, ModernRender, ModernHydrate, hydrateContext, callback, renderLevel, stringSSRHydrate, streamSSRHydrate;
22
20
  return _regeneratorRuntime().wrap(function _callee$(_context) {
23
21
  while (1) {
24
22
  switch (_context.prev = _context.next) {
25
23
  case 0:
26
- App = _ref.App, context = _ref.context, ModernRender = _ref.ModernRender, ModernHydrate = _ref.ModernHydrate;
27
- // if render level not exist, use client render
28
- 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
29
-
30
- if (renderLevel === RenderLevel.CLIENT_RENDER || renderLevel === RenderLevel.SERVER_PREFETCH) {
31
- ModernRender( /*#__PURE__*/_jsx(App, {
32
- context: context
33
- }));
34
- } else if (renderLevel === RenderLevel.SERVER_RENDER) {
35
- loadableReady(function () {
36
- var hydrateContext = _objectSpread(_objectSpread({}, context), {}, {
37
- _hydration: true
38
- });
39
-
40
- var callback = function callback() {
41
- // won't cause component re-render because context's reference identity doesn't change
42
- delete hydrateContext._hydration;
43
- }; // callback: https://github.com/reactwg/react-18/discussions/5
44
-
45
-
46
- if (IS_REACT18) {
47
- var SSRApp = function SSRApp() {
48
- return /*#__PURE__*/_jsx(WithCallback, {
49
- callback: callback,
50
- children: /*#__PURE__*/_jsx(App, {
51
- context: hydrateContext
52
- })
53
- });
54
- };
55
-
56
- SSRApp = hoistNonReactStatics(SSRApp, App);
57
- ModernHydrate( /*#__PURE__*/_jsx(SSRApp, {}));
24
+ streamSSRHydrate = function _streamSSRHydrate() {
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
+ }
42
+ };
43
+ stringSSRHydrate = function _stringSSRHydrate() {
44
+ // client render and server prefetch use same logic
45
+ if (renderLevel === RenderLevel.CLIENT_RENDER || renderLevel === RenderLevel.SERVER_PREFETCH) {
46
+ ModernRender( /*#__PURE__*/_jsx(App, {
47
+ context: context
48
+ }));
49
+ } else if (renderLevel === RenderLevel.SERVER_RENDER) {
50
+ if (isReact18()) {
51
+ loadableReady(function () {
52
+ // callback: https://github.com/reactwg/react-18/discussions/5
53
+ var SSRApp = function SSRApp() {
54
+ return /*#__PURE__*/_jsx(WithCallback, {
55
+ callback: callback,
56
+ children: /*#__PURE__*/_jsx(App, {
57
+ context: hydrateContext
58
+ })
59
+ });
60
+ };
61
+ SSRApp = hoistNonReactStatics(SSRApp, App);
62
+ ModernHydrate( /*#__PURE__*/_jsx(SSRApp, {}));
63
+ });
58
64
  } else {
59
- ModernHydrate( /*#__PURE__*/_jsx(App, {
60
- context: hydrateContext
61
- }), callback);
65
+ loadableReady(function () {
66
+ ModernHydrate( /*#__PURE__*/_jsx(App, {
67
+ context: hydrateContext
68
+ }), callback);
69
+ });
62
70
  }
63
- });
64
- } else {
65
- // unknown renderlevel or renderlevel is server prefetch.
66
- console.warn("unknow render level: ".concat(renderLevel, ", execute render()"));
67
- ModernRender( /*#__PURE__*/_jsx(App, {
68
- context: context
69
- }));
71
+ } else {
72
+ // unknown renderlevel or renderlevel is server prefetch.
73
+ console.warn("unknow render level: ".concat(renderLevel, ", execute render()"));
74
+ ModernRender( /*#__PURE__*/_jsx(App, {
75
+ context: context
76
+ }));
77
+ }
78
+ };
79
+ App = _ref.App, context = _ref.context, ModernRender = _ref.ModernRender, ModernHydrate = _ref.ModernHydrate;
80
+ hydrateContext = _objectSpread(_objectSpread({}, context), {}, {
81
+ _hydration: true
82
+ });
83
+ callback = function callback() {
84
+ // won't cause component re-render because context's reference identity doesn't change
85
+ delete hydrateContext._hydration;
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
88
+ if (!(isReact18() && config.mode === 'stream')) {
89
+ _context.next = 8;
90
+ break;
70
91
  }
71
-
72
- case 3:
92
+ return _context.abrupt("return", streamSSRHydrate());
93
+ case 8:
94
+ return _context.abrupt("return", stringSSRHydrate());
95
+ case 9:
73
96
  case "end":
74
97
  return _context.stop();
75
98
  }
76
99
  }
77
100
  }, _callee);
78
101
  }));
79
-
80
102
  function client(_x) {
81
103
  return _client.apply(this, arguments);
82
104
  }
83
-
84
105
  return client;
85
106
  }(),
86
107
  init: function init(_ref2, next) {
87
108
  var _window2, _window2$_SSR_DATA, _window2$_SSR_DATA$co;
88
-
89
109
  var context = _ref2.context;
90
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;
91
-
92
111
  if (!request) {
93
112
  context.ssrContext = _objectSpread(_objectSpread({}, context.ssrContext), {}, {
94
113
  response: mockResp,
@@ -98,7 +117,6 @@ export var ssr = function ssr(_) {
98
117
  context: context
99
118
  });
100
119
  }
101
-
102
120
  context.ssrContext.response = mockResp;
103
121
  context.ssrContext.request = formatClient(request);
104
122
  return next({
@@ -107,12 +125,10 @@ export var ssr = function ssr(_) {
107
125
  },
108
126
  pickContext: function pickContext(_ref3, next) {
109
127
  var _window3, _window3$_SSR_DATA, _window3$_SSR_DATA$co;
110
-
111
128
  var context = _ref3.context,
112
- pickedContext = _ref3.pickedContext;
129
+ pickedContext = _ref3.pickedContext;
113
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;
114
131
  var initialData = context.initialData;
115
-
116
132
  if (!request) {
117
133
  return next({
118
134
  context: context,
@@ -121,7 +137,6 @@ export var ssr = function ssr(_) {
121
137
  })
122
138
  });
123
139
  }
124
-
125
140
  return next({
126
141
  context: context,
127
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 { render } from "./serverRender";
6
- import prefetch from "./prefetch";
7
4
  import { formatServer } from "./utils";
8
- var registeredApps = new WeakSet();
5
+ import render from "./serverRender";
9
6
  export var ssr = function ssr() {
10
7
  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
11
8
  return {
@@ -15,44 +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;
32
- return render(context, config, App);
33
-
34
- case 4:
35
- html = _context2.sent;
36
- return _context2.abrupt("return", html);
37
-
38
- case 6:
20
+ _context.next = 3;
21
+ return render({
22
+ context: context,
23
+ App: App,
24
+ config: config
25
+ });
26
+ case 3:
27
+ html = _context.sent;
28
+ return _context.abrupt("return", html);
29
+ case 5:
39
30
  case "end":
40
- return _context2.stop();
31
+ return _context.stop();
41
32
  }
42
33
  }
43
34
  }, _callee);
44
35
  }));
45
-
46
36
  function server(_x) {
47
37
  return _server.apply(this, arguments);
48
38
  }
49
-
50
39
  return server;
51
40
  }(),
52
41
  init: function init(_ref2, next) {
53
42
  var context = _ref2.context;
54
43
  var _ref3 = context.ssrContext,
55
- request = _ref3.request;
44
+ request = _ref3.request;
56
45
  context.ssrContext.request = formatServer(request);
57
46
  return next({
58
47
  context: context
@@ -60,13 +49,11 @@ export var ssr = function ssr() {
60
49
  },
61
50
  pickContext: function pickContext(_ref4, next) {
62
51
  var context = _ref4.context,
63
- pickedContext = _ref4.pickedContext;
64
-
52
+ pickedContext = _ref4.pickedContext;
65
53
  // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain
66
54
  var _ref5 = context === null || context === void 0 ? void 0 : context.ssrContext,
67
- request = _ref5.request,
68
- response = _ref5.response;
69
-
55
+ request = _ref5.request,
56
+ response = _ref5.response;
70
57
  var initialData = context.initialData;
71
58
  return next({
72
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);
@@ -16,10 +16,9 @@ var PROP_NAMES = {
16
16
  FALLBACK: 'fallback',
17
17
  MATCHES: 'matches'
18
18
  };
19
-
20
- var handleClientStateChange = function handleClientStateChange() {// not used
19
+ var handleClientStateChange = function handleClientStateChange() {
20
+ // not used
21
21
  };
22
-
23
22
  var mapStateOnServer = function mapStateOnServer(reduceProps) {
24
23
  var defaultProps = {
25
24
  interval: 10,
@@ -34,15 +33,12 @@ var mapStateOnServer = function mapStateOnServer(reduceProps) {
34
33
  var propKey = key;
35
34
  var reduceProp = reduceProps[propKey];
36
35
  var nextProps = props;
37
-
38
36
  if (exist(reduceProp)) {
39
37
  nextProps = _objectSpread(_objectSpread({}, props), {}, _defineProperty({}, propKey, reduceProp));
40
38
  }
41
-
42
39
  return nextProps;
43
40
  }, defaultProps);
44
41
  };
45
-
46
42
  var reducePropsToState = function reducePropsToState(propsList) {
47
43
  var reduceProps = {
48
44
  interval: getOutermostProperty(propsList, PROP_NAMES.INTERVAL),
@@ -55,19 +51,14 @@ var reducePropsToState = function reducePropsToState(propsList) {
55
51
  };
56
52
  return reduceProps;
57
53
  };
58
-
59
54
  function factory(Component) {
60
55
  var Spr = /*#__PURE__*/function (_React$Component) {
61
56
  _inherits(Spr, _React$Component);
62
-
63
57
  var _super = _createSuper(Spr);
64
-
65
58
  function Spr() {
66
59
  _classCallCheck(this, Spr);
67
-
68
60
  return _super.apply(this, arguments);
69
61
  }
70
-
71
62
  _createClass(Spr, [{
72
63
  key: "verify",
73
64
  value: function verify() {
@@ -77,13 +68,10 @@ function factory(Component) {
77
68
  key: "render",
78
69
  value: function render() {
79
70
  var newProps = _objectSpread({}, this.props);
80
-
81
71
  var validate = this.verify();
82
-
83
72
  if (!validate) {
84
73
  throw new Error('invalid props, check usage');
85
74
  }
86
-
87
75
  return /*#__PURE__*/createElement(Component, _objectSpread({}, newProps));
88
76
  }
89
77
  }], [{
@@ -95,25 +83,18 @@ function factory(Component) {
95
83
  Component.canUseDOM = canUseDOM;
96
84
  }
97
85
  }]);
98
-
99
86
  return Spr;
100
87
  }(React.Component);
101
-
102
88
  _defineProperty(Spr, "peek", Component.peek);
103
-
104
89
  _defineProperty(Spr, "rewind", Component.rewind);
105
-
106
90
  _defineProperty(Spr, "config", function () {
107
91
  var mappedState = Component.rewind();
108
92
  return mappedState;
109
93
  });
110
-
111
94
  return Spr;
112
95
  }
113
-
114
96
  var NullComponent = function NullComponent() {
115
97
  return null;
116
98
  };
117
-
118
99
  var SprSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);
119
100
  export var PreRender = factory(SprSideEffects);
@@ -3,22 +3,18 @@ var REQUEST_META = ['header', 'query'];
3
3
  export var getInnermostProperty = function getInnermostProperty(propsList, propName) {
4
4
  for (var i = propsList.length - 1; i >= 0; i--) {
5
5
  var props = propsList[i];
6
-
7
6
  if (props.hasOwnProperty(propName)) {
8
7
  return props[propName];
9
8
  }
10
9
  }
11
-
12
10
  return null;
13
11
  };
14
12
  export var getOutermostProperty = function getOutermostProperty(propsList, propName) {
15
13
  var _iterator = _createForOfIteratorHelper(propsList),
16
- _step;
17
-
14
+ _step;
18
15
  try {
19
16
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
20
17
  var props = _step.value;
21
-
22
18
  if (props.hasOwnProperty(propName)) {
23
19
  return props[propName];
24
20
  }
@@ -28,7 +24,6 @@ export var getOutermostProperty = function getOutermostProperty(propsList, propN
28
24
  } finally {
29
25
  _iterator.f();
30
26
  }
31
-
32
27
  return null;
33
28
  };
34
29
  export var aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propName) {
@@ -42,7 +37,6 @@ export var aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propN
42
37
  }).reduce(function (result, next) {
43
38
  REQUEST_META.forEach(function (key) {
44
39
  var prop = next[propName];
45
-
46
40
  if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulArray(prop[key])) {
47
41
  result[key] = unique(result[key].concat(prop[key]));
48
42
  }
@@ -51,13 +45,10 @@ export var aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propN
51
45
  }, initResult);
52
46
  return REQUEST_META.reduce(function (result, next) {
53
47
  var _result$key;
54
-
55
48
  var key = next;
56
-
57
49
  if (result[key] && ((_result$key = result[key]) === null || _result$key === void 0 ? void 0 : _result$key.length) === 0) {
58
50
  delete result[key];
59
51
  }
60
-
61
52
  return result;
62
53
  }, res);
63
54
  };
@@ -71,8 +62,8 @@ export var aggMatchesFromPropsList = function aggMatchesFromPropsList(propsList,
71
62
  return usefulObject(props[propName]);
72
63
  }).reduce(function (result, next) {
73
64
  REQUEST_META.forEach(function (key) {
74
- var prop = next[propName]; // 这边目前是浅拷贝,越后渲染优先级越高
75
-
65
+ var prop = next[propName];
66
+ // 这边目前是浅拷贝,越后渲染优先级越高
76
67
  if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulObject(prop[key])) {
77
68
  result[key] = Object.assign(result[key], prop[key]);
78
69
  }
@@ -81,35 +72,27 @@ export var aggMatchesFromPropsList = function aggMatchesFromPropsList(propsList,
81
72
  }, initResult);
82
73
  return REQUEST_META.reduce(function (result, next) {
83
74
  var key = next;
84
-
85
75
  if (result[key] && Object.keys(result[key]).length === 0) {
86
76
  delete result[key];
87
77
  }
88
-
89
78
  return result;
90
79
  }, res);
91
80
  };
92
-
93
81
  function unique(arr) {
94
82
  return Array.from(new Set(arr));
95
83
  }
96
-
97
84
  function usefulObject(target) {
98
85
  if (!exist(target)) {
99
86
  return false;
100
87
  }
101
-
102
88
  return target.constructor === Object && Object.keys(target).length > 0;
103
89
  }
104
-
105
90
  function usefulArray(target) {
106
91
  if (!exist(target)) {
107
92
  return false;
108
93
  }
109
-
110
94
  return Array.isArray(target) && target.length > 0;
111
95
  }
112
-
113
96
  export function exist(target) {
114
97
  return target != null;
115
98
  }
@@ -2,13 +2,12 @@
2
2
  import { useRef, useLayoutEffect } from 'react';
3
3
  export var WithCallback = function WithCallback(_ref) {
4
4
  var callback = _ref.callback,
5
- children = _ref.children;
5
+ children = _ref.children;
6
6
  var once = useRef(false);
7
7
  useLayoutEffect(function () {
8
8
  if (once.current) {
9
9
  return;
10
10
  }
11
-
12
11
  once.current = true;
13
12
  callback();
14
13
  }, [callback]);
@@ -1,37 +1,38 @@
1
1
  // 用于 react-helmet 正则替换
2
+ import { EOL } from 'os';
2
3
  var RE_HTML_ATTR = /<html[^>]*>/;
3
4
  var RE_BODY_ATTR = /<body[^>]*>/;
4
5
  var RE_LAST_IN_HEAD = /<\/head>/;
5
6
  var RE_TITLE = /<title[^>]*>([\s\S\n\r]*?)<\/title>/;
6
- var TEST_TITLE_CONTENT = /(?<=<title[^>]*>)([\s\S\n\r]*?)([.|\S])([\s\S\n\r]*?)(?=<\/title>)/; // 通过 react-helmet 修改模板
7
+ var TEST_TITLE_CONTENT = /(?<=<title[^>]*>)([\s\S\n\r]*?)([.|\S])([\s\S\n\r]*?)(?=<\/title>)/;
7
8
 
9
+ // 通过 react-helmet 修改模板
8
10
  export default function helmet(content, helmetData) {
9
11
  var result = content;
10
12
  var bodyAttributes = helmetData.bodyAttributes.toString();
11
-
12
13
  if (bodyAttributes) {
13
14
  result = result.replace(RE_BODY_ATTR, "<body ".concat(bodyAttributes, ">"));
14
15
  }
15
-
16
16
  var htmlAttributes = helmetData.htmlAttributes.toString();
17
-
18
17
  if (htmlAttributes) {
19
18
  result = result.replace(RE_HTML_ATTR, "<html ".concat(htmlAttributes, ">"));
20
19
  }
21
-
22
20
  var base = helmetData.base.toString();
23
21
  var link = helmetData.link.toString();
24
22
  var meta = helmetData.meta.toString();
25
23
  var noscript = helmetData.noscript.toString();
26
24
  var script = helmetData.script.toString();
27
25
  var style = helmetData.style.toString();
28
- var title = helmetData.title.toString(); // 如果模板中存在 title,且 helmetData title 有内容则做替换
29
-
30
- var existTitle = RE_TITLE.test(content);
26
+ var title = helmetData.title.toString();
31
27
 
32
- if (TEST_TITLE_CONTENT.test(title.trim()) && existTitle) {
28
+ // 如果模板中存在 title,且 helmetData title 有内容则做替换
29
+ var existTitleTag = RE_TITLE.test(content);
30
+ var shouldReplaceTitle = existTitleTag && TEST_TITLE_CONTENT.test(title.trim());
31
+ if (shouldReplaceTitle) {
33
32
  result = result.replace(RE_TITLE, title);
34
33
  }
35
-
36
- return result.replace(RE_LAST_IN_HEAD, "\n ".concat(base, "\n ").concat(link, "\n ").concat(meta, "\n ").concat(noscript, "\n ").concat(script, "\n ").concat(style, "\n ").concat(existTitle ? '' : title, "\n </head>\n "));
34
+ var helmetStr = [base, link, meta, noscript, script, style, !existTitleTag ? title : ''].reduce(function (pre, cur) {
35
+ return pre + (cur.length > 0 ? " ".concat(cur).concat(EOL) : '');
36
+ }, '');
37
+ return result.replace(RE_LAST_IN_HEAD, "".concat(helmetStr, "</head>"));
37
38
  }