@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
@@ -7,33 +7,25 @@ exports.aggMatchesFromPropsList = exports.aggKeysFromPropsList = void 0;
7
7
  exports.exist = exist;
8
8
  exports.getOutermostProperty = exports.getInnermostProperty = void 0;
9
9
  const REQUEST_META = ['header', 'query'];
10
-
11
10
  const getInnermostProperty = function getInnermostProperty(propsList, propName) {
12
11
  for (let i = propsList.length - 1; i >= 0; i--) {
13
12
  const props = propsList[i];
14
-
15
13
  if (props.hasOwnProperty(propName)) {
16
14
  return props[propName];
17
15
  }
18
16
  }
19
-
20
17
  return null;
21
18
  };
22
-
23
19
  exports.getInnermostProperty = getInnermostProperty;
24
-
25
20
  const getOutermostProperty = function getOutermostProperty(propsList, propName) {
26
21
  for (const props of propsList) {
27
22
  if (props.hasOwnProperty(propName)) {
28
23
  return props[propName];
29
24
  }
30
25
  }
31
-
32
26
  return null;
33
27
  };
34
-
35
28
  exports.getOutermostProperty = getOutermostProperty;
36
-
37
29
  const aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propName) {
38
30
  const initResult = REQUEST_META.reduce((result, next) => {
39
31
  const key = next;
@@ -43,7 +35,6 @@ const aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propName)
43
35
  const res = propsList.filter(props => usefulObject(props[propName])).reduce((result, next) => {
44
36
  REQUEST_META.forEach(key => {
45
37
  const prop = next[propName];
46
-
47
38
  if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulArray(prop[key])) {
48
39
  result[key] = unique(result[key].concat(prop[key]));
49
40
  }
@@ -52,19 +43,14 @@ const aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propName)
52
43
  }, initResult);
53
44
  return REQUEST_META.reduce((result, next) => {
54
45
  var _result$key;
55
-
56
46
  const key = next;
57
-
58
47
  if (result[key] && ((_result$key = result[key]) === null || _result$key === void 0 ? void 0 : _result$key.length) === 0) {
59
48
  delete result[key];
60
49
  }
61
-
62
50
  return result;
63
51
  }, res);
64
52
  };
65
-
66
53
  exports.aggKeysFromPropsList = aggKeysFromPropsList;
67
-
68
54
  const aggMatchesFromPropsList = function aggMatchesFromPropsList(propsList, propName) {
69
55
  const initResult = REQUEST_META.reduce((result, next) => {
70
56
  const key = next;
@@ -73,8 +59,8 @@ const aggMatchesFromPropsList = function aggMatchesFromPropsList(propsList, prop
73
59
  }, {});
74
60
  const res = propsList.filter(props => usefulObject(props[propName])).reduce((result, next) => {
75
61
  REQUEST_META.forEach(key => {
76
- const prop = next[propName]; // 这边目前是浅拷贝,越后渲染优先级越高
77
-
62
+ const prop = next[propName];
63
+ // 这边目前是浅拷贝,越后渲染优先级越高
78
64
  if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulObject(prop[key])) {
79
65
  result[key] = Object.assign(result[key], prop[key]);
80
66
  }
@@ -83,37 +69,28 @@ const aggMatchesFromPropsList = function aggMatchesFromPropsList(propsList, prop
83
69
  }, initResult);
84
70
  return REQUEST_META.reduce((result, next) => {
85
71
  const key = next;
86
-
87
72
  if (result[key] && Object.keys(result[key]).length === 0) {
88
73
  delete result[key];
89
74
  }
90
-
91
75
  return result;
92
76
  }, res);
93
77
  };
94
-
95
78
  exports.aggMatchesFromPropsList = aggMatchesFromPropsList;
96
-
97
79
  function unique(arr) {
98
80
  return Array.from(new Set(arr));
99
81
  }
100
-
101
82
  function usefulObject(target) {
102
83
  if (!exist(target)) {
103
84
  return false;
104
85
  }
105
-
106
86
  return target.constructor === Object && Object.keys(target).length > 0;
107
87
  }
108
-
109
88
  function usefulArray(target) {
110
89
  if (!exist(target)) {
111
90
  return false;
112
91
  }
113
-
114
92
  return Array.isArray(target) && target.length > 0;
115
93
  }
116
-
117
94
  function exist(target) {
118
95
  return target != null;
119
96
  }
@@ -4,10 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.WithCallback = void 0;
7
-
8
7
  var _react = require("react");
9
-
10
8
  // See https://github.com/reactwg/react-18/discussions/5#discussioncomment-2276079
9
+
11
10
  const WithCallback = ({
12
11
  callback,
13
12
  children
@@ -17,11 +16,9 @@ const WithCallback = ({
17
16
  if (once.current) {
18
17
  return;
19
18
  }
20
-
21
19
  once.current = true;
22
20
  callback();
23
21
  }, [callback]);
24
22
  return children;
25
23
  };
26
-
27
24
  exports.WithCallback = WithCallback;
@@ -4,49 +4,42 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = helmet;
7
+ var _os = require("os");
7
8
  // 用于 react-helmet 正则替换
9
+
8
10
  const RE_HTML_ATTR = /<html[^>]*>/;
9
11
  const RE_BODY_ATTR = /<body[^>]*>/;
10
12
  const RE_LAST_IN_HEAD = /<\/head>/;
11
13
  const RE_TITLE = /<title[^>]*>([\s\S\n\r]*?)<\/title>/;
12
- const TEST_TITLE_CONTENT = /(?<=<title[^>]*>)([\s\S\n\r]*?)([.|\S])([\s\S\n\r]*?)(?=<\/title>)/; // 通过 react-helmet 修改模板
14
+ const TEST_TITLE_CONTENT = /(?<=<title[^>]*>)([\s\S\n\r]*?)([.|\S])([\s\S\n\r]*?)(?=<\/title>)/;
13
15
 
16
+ // 通过 react-helmet 修改模板
14
17
  function helmet(content, helmetData) {
15
18
  let result = content;
16
19
  const bodyAttributes = helmetData.bodyAttributes.toString();
17
-
18
20
  if (bodyAttributes) {
19
21
  result = result.replace(RE_BODY_ATTR, `<body ${bodyAttributes}>`);
20
22
  }
21
-
22
23
  const htmlAttributes = helmetData.htmlAttributes.toString();
23
-
24
24
  if (htmlAttributes) {
25
25
  result = result.replace(RE_HTML_ATTR, `<html ${htmlAttributes}>`);
26
26
  }
27
-
28
27
  const base = helmetData.base.toString();
29
28
  const link = helmetData.link.toString();
30
29
  const meta = helmetData.meta.toString();
31
30
  const noscript = helmetData.noscript.toString();
32
31
  const script = helmetData.script.toString();
33
32
  const style = helmetData.style.toString();
34
- const title = helmetData.title.toString(); // 如果模板中存在 title,且 helmetData title 有内容则做替换
35
-
36
- const existTitle = RE_TITLE.test(content);
33
+ const title = helmetData.title.toString();
37
34
 
38
- if (TEST_TITLE_CONTENT.test(title.trim()) && existTitle) {
35
+ // 如果模板中存在 title,且 helmetData title 有内容则做替换
36
+ const existTitleTag = RE_TITLE.test(content);
37
+ const shouldReplaceTitle = existTitleTag && TEST_TITLE_CONTENT.test(title.trim());
38
+ if (shouldReplaceTitle) {
39
39
  result = result.replace(RE_TITLE, title);
40
40
  }
41
-
42
- return result.replace(RE_LAST_IN_HEAD, `
43
- ${base}
44
- ${link}
45
- ${meta}
46
- ${noscript}
47
- ${script}
48
- ${style}
49
- ${existTitle ? '' : title}
50
- </head>
51
- `);
41
+ const helmetStr = [base, link, meta, noscript, script, style, !existTitleTag ? title : ''].reduce((pre, cur) => {
42
+ return pre + (cur.length > 0 ? ` ${cur}${_os.EOL}` : '');
43
+ }, '');
44
+ return result.replace(RE_LAST_IN_HEAD, `${helmetStr}</head>`);
52
45
  }
@@ -3,43 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.render = void 0;
7
-
8
- var _ssr = require("@modern-js/utils/ssr");
9
-
10
- var _prerender = require("../react/prerender");
11
-
12
- var _entry = _interopRequireDefault(require("./entry"));
13
-
14
- var _measure = require("./measure");
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- const render = async (ctx, config, App) => {
19
- const {
20
- ssrContext
21
- } = ctx;
22
- return (0, _ssr.run)(ssrContext.request.headers, async () => {
23
- const entry = new _entry.default({
24
- ctx: ssrContext,
25
- App,
26
- config
27
- });
28
- entry.metrics.emitCounter('app.visit.count', 1);
29
- const end = (0, _measure.time)();
30
- const html = await entry.renderToHtml(ctx);
31
- const cost = end();
32
- entry.logger.info('App Render Total cost = %d ms', cost);
33
- entry.metrics.emitTimer('app.render.cost', cost);
34
-
35
- const cacheConfig = _prerender.PreRender.config();
36
-
37
- if (cacheConfig) {
38
- ctx.ssrContext.cacheConfig = cacheConfig;
39
- }
40
-
6
+ exports.default = serverRender;
7
+ var _utils = require("../utils");
8
+ /* eslint-disable eslint-comments/disable-enable-pair */
9
+ /* eslint-disable @typescript-eslint/no-var-requires */
10
+ /* eslint-disable @typescript-eslint/no-require-imports */
11
+
12
+ async function serverRender(options) {
13
+ if ((0, _utils.isReact18)() && options.config.mode === 'stream') {
14
+ const pipe = await require("./renderToStream").render(options);
15
+ return pipe;
16
+ } else {
17
+ const html = await require("./renderToString").render(options);
41
18
  return html;
42
- });
43
- };
44
-
45
- exports.render = render;
19
+ }
20
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildShellAfterTemplate = buildShellAfterTemplate;
7
+ var _serializeJavascript = _interopRequireDefault(require("serialize-javascript"));
8
+ var _buildTemplate = require("./buildTemplate.share");
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ function buildShellAfterTemplate(afterAppTemplate, options) {
11
+ const callbacks = [injectSSRDataScript];
12
+ return (0, _buildTemplate.buildTemplate)(afterAppTemplate, callbacks);
13
+ function injectSSRDataScript(template) {
14
+ const ssrDataScript = buildSSRDataScript();
15
+ return template.replace('<!--<?- SSRDataScript ?>-->', ssrDataScript);
16
+ function buildSSRDataScript() {
17
+ const {
18
+ ssrContext,
19
+ renderLevel
20
+ } = options;
21
+ const {
22
+ request
23
+ } = ssrContext;
24
+ const SSRData = {
25
+ context: {
26
+ request: {
27
+ params: request.params,
28
+ query: request.query,
29
+ pathname: request.pathname,
30
+ host: request.host,
31
+ url: request.url,
32
+ headers: request.headers,
33
+ cookieMap: request.cookieMap
34
+ }
35
+ },
36
+ renderLevel
37
+ };
38
+ return `
39
+ <script>window._SSR_DATA = ${(0, _serializeJavascript.default)(SSRData, {
40
+ isJSON: true
41
+ })}</script>
42
+ `;
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.HEAD_REG_EXP = void 0;
7
+ exports.buildTemplate = buildTemplate;
8
+ // share script
9
+ const HEAD_REG_EXP = /<head(.|\n)*>(.|\n)*<\/head>/;
10
+ exports.HEAD_REG_EXP = HEAD_REG_EXP;
11
+ function buildTemplate(template, callbacks) {
12
+ return callbacks.reduce((template, buildTemplateCb) => buildTemplateCb(template), template);
13
+ }
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildShellBeforeTemplate = buildShellBeforeTemplate;
7
+ var _reactHelmet = _interopRequireDefault(require("react-helmet"));
8
+ var _reactRouterDom = require("react-router-dom");
9
+ var _helmet = _interopRequireDefault(require("../helmet"));
10
+ var _buildTemplate = require("./buildTemplate.share");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ const CSS_CHUNKS_PLACEHOLDER = '<!--<?- chunksMap.css ?>-->';
13
+
14
+ // build head template
15
+ function getHeadTemplate(beforeEntryTemplate, context) {
16
+ const callbacks = [headTemplate => {
17
+ const helmetData = _reactHelmet.default.renderStatic();
18
+ return helmetData ? (0, _helmet.default)(headTemplate, helmetData) : headTemplate;
19
+ },
20
+ // @TODO: prefetch scripts of lazy component
21
+ injectCss];
22
+ const [headTemplate = ''] = beforeEntryTemplate.match(_buildTemplate.HEAD_REG_EXP) || [];
23
+ if (!headTemplate.length) {
24
+ return '';
25
+ }
26
+ return (0, _buildTemplate.buildTemplate)(headTemplate, callbacks);
27
+ function injectCss(headTemplate) {
28
+ return headTemplate.replace(CSS_CHUNKS_PLACEHOLDER, getCssChunks());
29
+ function getCssChunks() {
30
+ const {
31
+ routeManifest,
32
+ routerContext,
33
+ routes
34
+ } = context;
35
+ if (!routeManifest || !routerContext || !routes) {
36
+ return '';
37
+ }
38
+ const {
39
+ routeAssets
40
+ } = routeManifest;
41
+ const cssChunks = [];
42
+ const matches = (0, _reactRouterDom.matchRoutes)(routes, routerContext.location);
43
+ matches === null || matches === void 0 ? void 0 : matches.forEach(match => {
44
+ const routeId = match.route.id;
45
+ if (routeId) {
46
+ const {
47
+ assets = []
48
+ } = routeAssets[routeId];
49
+ const _cssChunks = assets.filter(asset => asset === null || asset === void 0 ? void 0 : asset.endsWith('.css'));
50
+ cssChunks.push(..._cssChunks);
51
+ }
52
+ });
53
+ const styleLinks = cssChunks.map(chunk => {
54
+ return `<link href="${chunk}" rel="stylesheet" />`;
55
+ });
56
+ return `${styleLinks.join('')}`;
57
+ }
58
+ }
59
+ }
60
+
61
+ // build script
62
+ function buildShellBeforeTemplate(beforeAppTemplate, context) {
63
+ const headTemplate = getHeadTemplate(beforeAppTemplate, context);
64
+ return beforeAppTemplate.replace(_buildTemplate.HEAD_REG_EXP, headTemplate);
65
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.render = void 0;
7
+ var _react = require("react");
8
+ var _ssr = require("@modern-js/utils/ssr");
9
+ var _prerender = require("../../react/prerender");
10
+ var _utils = require("../utils");
11
+ var _renderToPipe = _interopRequireDefault(require("./renderToPipe"));
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ const render = ({
14
+ App,
15
+ context
16
+ }) => {
17
+ const {
18
+ ssrContext
19
+ } = context;
20
+ if (!ssrContext) {
21
+ throw new Error('The "ssrContext" must not be undefined, but received undefined');
22
+ }
23
+ return (0, _ssr.run)(ssrContext.request.headers, async () => {
24
+ const end = (0, _utils.time)();
25
+ const rootElement = /*#__PURE__*/(0, _react.createElement)(App, {
26
+ context: Object.assign(context || {}, {
27
+ ssr: true
28
+ })
29
+ });
30
+ const pipe = (0, _renderToPipe.default)(rootElement, context, {
31
+ onShellReady() {
32
+ // set cacheConfig
33
+ const cacheConfig = _prerender.PreRender.config();
34
+ if (cacheConfig) {
35
+ ssrContext.cacheConfig = cacheConfig;
36
+ }
37
+ },
38
+ onAllReady() {
39
+ // calculate streaming ssr cost
40
+ const cost = end();
41
+ ssrContext.logger.debug('App Render To HTML cost = %d ms', cost);
42
+ ssrContext.metrics.emitTimer('app.render.html.cost', cost);
43
+ }
44
+ });
45
+ return pipe;
46
+ });
47
+ };
48
+ exports.render = render;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getLoadableChunks = getLoadableChunks;
7
+ var _server = require("@loadable/server");
8
+ function getLoadableChunks({
9
+ context,
10
+ jsx
11
+ }) {
12
+ const {
13
+ loadableStats,
14
+ entryName
15
+ } = context.ssrContext;
16
+ if (!loadableStats) {
17
+ return {
18
+ jsx
19
+ };
20
+ }
21
+ const extractor = new _server.ChunkExtractor({
22
+ stats: loadableStats,
23
+ entrypoints: [entryName]
24
+ });
25
+ const collectedJsx = extractor.collectChunks(jsx);
26
+ return {
27
+ jsx: collectedJsx,
28
+ chunkExtractor: extractor
29
+ };
30
+ }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _stream = require("stream");
8
+ var _server = require("react-dom/server");
9
+ var _types = require("../types");
10
+ var _template = require("./template");
11
+ 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; }
12
+ 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; }
13
+ 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; }
14
+ function renderToPipe(rootElement, context, options) {
15
+ let isShellStream = true;
16
+ const {
17
+ ssrContext
18
+ } = context;
19
+ const forUserPipe = stream => {
20
+ return new Promise(resolve => {
21
+ const {
22
+ pipe
23
+ } = (0, _server.renderToPipeableStream)(rootElement, _objectSpread(_objectSpread({}, options), {}, {
24
+ onShellReady() {
25
+ var _options$onShellReady;
26
+ const {
27
+ shellAfter,
28
+ shellBefore
29
+ } = (0, _template.getTemplates)(context, _types.RenderLevel.SERVER_RENDER);
30
+ options === null || options === void 0 ? void 0 : (_options$onShellReady = options.onShellReady) === null || _options$onShellReady === void 0 ? void 0 : _options$onShellReady.call(options);
31
+ const injectableTransform = new _stream.Transform({
32
+ transform(chunk, _encoding, callback) {
33
+ try {
34
+ if (isShellStream) {
35
+ this.push(joinChunk(shellBefore, chunk, shellAfter));
36
+ isShellStream = false;
37
+ } else {
38
+ this.push(chunk);
39
+ }
40
+ callback();
41
+ } catch (e) {
42
+ if (e instanceof Error) {
43
+ callback(e);
44
+ } else {
45
+ callback(new Error('Received unkown error when streaming'));
46
+ }
47
+ }
48
+ }
49
+ });
50
+ resolve(pipe(injectableTransform).pipe(stream));
51
+ },
52
+ onShellError(error) {
53
+ var _options$onShellError;
54
+ // Don't log error in `onShellError` callback, since it has been logged in `onError` callback
55
+ ssrContext.metrics.emitCounter('app.render.streaming.shell.error', 1);
56
+ const {
57
+ shellAfter,
58
+ shellBefore
59
+ } = (0, _template.getTemplates)(context, _types.RenderLevel.CLIENT_RENDER);
60
+ const fallbackHtml = `${shellBefore}${shellAfter}`;
61
+ resolve(fallbackHtml);
62
+ options === null || options === void 0 ? void 0 : (_options$onShellError = options.onShellError) === null || _options$onShellError === void 0 ? void 0 : _options$onShellError.call(options, error);
63
+ },
64
+ onError(error) {
65
+ var _options$onError;
66
+ ssrContext.logger.error('An error occurs during streaming SSR', error);
67
+ ssrContext.metrics.emitCounter('app.render.streaming.error', 1);
68
+ options === null || options === void 0 ? void 0 : (_options$onError = options.onError) === null || _options$onError === void 0 ? void 0 : _options$onError.call(options, error);
69
+ }
70
+ }));
71
+ });
72
+ };
73
+ return forUserPipe;
74
+ function joinChunk(before = '', chunk, after = '') {
75
+ return `${before}${chunk.toString()}${after}`;
76
+ }
77
+ }
78
+ var _default = renderToPipe;
79
+ exports.default = _default;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getStyledComponentCss = getStyledComponentCss;
7
+ var _styledComponents = require("styled-components");
8
+ function getStyledComponentCss({
9
+ jsx
10
+ }) {
11
+ const sheet = new _styledComponents.ServerStyleSheet();
12
+ const collectedJsx = sheet.collectStyles(jsx);
13
+ return {
14
+ styleSheet: sheet,
15
+ jsx: collectedJsx
16
+ };
17
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getTemplates = void 0;
7
+ var _buildTemplate = require("./buildTemplate.after");
8
+ var _bulidTemplate = require("./bulidTemplate.before");
9
+ const HTML_SEPARATOR = '<!--<?- html ?>-->';
10
+ const getTemplates = (context, renderLevel) => {
11
+ const {
12
+ ssrContext
13
+ } = context;
14
+ const [beforeAppTemplate = '', afterAppHtmlTemplate = ''] = ssrContext.template.split(HTML_SEPARATOR) || [];
15
+ const builtBeforeTemplate = (0, _bulidTemplate.buildShellBeforeTemplate)(beforeAppTemplate, context);
16
+ const builtAfterTemplate = (0, _buildTemplate.buildShellAfterTemplate)(afterAppHtmlTemplate, {
17
+ ssrContext: ssrContext,
18
+ renderLevel
19
+ });
20
+ return {
21
+ shellBefore: builtBeforeTemplate,
22
+ shellAfter: builtAfterTemplate
23
+ };
24
+ };
25
+ exports.getTemplates = getTemplates;