@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
package/CHANGELOG.md CHANGED
@@ -1,34 +1,133 @@
1
1
  # @modern-js/runtime
2
2
 
3
- ## 1.21.5
3
+ ## 2.0.0-beta.1
4
4
 
5
- ### Patch Changes
6
-
7
- - a150632: fix: bootstrap function params type define
5
+ ### Major Changes
8
6
 
9
- fix: 修复 bootstrap 函数参数类型定义
7
+ - dda38c9: chore: v2
10
8
 
11
- - 29576fc: fix: extname function logic bug fix
12
- fix: 修复 extname 函数的逻辑问题
13
- - @modern-js/webpack@1.21.5
14
- - @modern-js/plugin@1.21.5
15
- - @modern-js/utils@1.21.5
9
+ ### Minor Changes
16
10
 
17
- ## 1.21.4
11
+ - c9e800d39a: feat: support React18 streaming SSR
12
+ feat: 支持 React18 流式 SSR
13
+ - 543be9558e: feat: compile server loader and support handle loader request
14
+ feat: 编译 server loader 并支持处理 loader 的请求
18
15
 
19
16
  ### Patch Changes
20
17
 
21
- - @modern-js/webpack@1.21.4
22
- - @modern-js/plugin@1.21.4
23
- - @modern-js/utils@1.21.4
18
+ - 2344eb2: fix: bootstrap function params type define
19
+
20
+ fix: 修复 bootstrap 函数参数类型定义
21
+
22
+ - a11fcf8: feat: fallback logic of streaming ssr
23
+ feat: streaming ssr 降级逻辑
24
+ - b18fa8f: feat: remove @loadable/component in streaming ssr
25
+ feat: 移除 streaming ssr 中的 @loadable/component 逻辑
26
+ - 3e57f2b: feat: add document feature with plugin
27
+
28
+ feat: 增加 document 功能插件
29
+
30
+ - fbf5eed: fix: fix ssg failure due to lack of Web Response API
31
+ fix: 修复因为缺少 Web Response API 而导致 ssg 失败
32
+ - a2509bfbdb: feat: bump esbuild from 0.14.38 to 0.15.7
33
+
34
+ feat: 将 esbuild 从 0.14.38 版本升级至 0.15.7 版本
35
+
36
+ - 4369648ae2: fix: fix html template of streaming ssr
37
+ fix: 修复流式渲染的 html 模版
38
+ - 92c0994: chore: remove `registerPrefetch`
39
+ chore: 移除 `registerPrefetch`
40
+ - 6bda14ed71: feat: refactor router with react-router@6.4
41
+
42
+ feat: 使用 react-router@6.4 重构路由模块
43
+
44
+ - 92004d1: feat: support load chunks parallelly
45
+ feat: 支持并行加载 chunks
46
+ - 40ed587: feat: inject css chunk into html for streaming ssr
47
+ feat: streaming ssr 返回的 html 注入 css chunk
48
+ - 60d5378632: fix: function extname should not return array
49
+ fix: 函数 extname 不应该返回一个数组
50
+ - 8b8e1bb571: feat: support nested routes
51
+ feat: 支持嵌套路由
52
+ - 3bbea92b2a: feat: support Hook、Middleware new API
53
+ feat: 支持 Hook、Middleware 的新 API
54
+ - 18aaf42: fix: fix server loader redirects
55
+ fix: 修复 server loader 重定向错误
56
+ - fcace5b5b9: fix: remove overmuch `@modernjs/utils` dependency import in ssr runtime & SSR hydrate error
57
+ fix: 去除 ssr 运行时过多的 `@modernjs/utils` 依赖引入 & SSR hydrate 错误
58
+ - Updated dependencies [92f0ead]
59
+ - Updated dependencies [edd1cfb1af]
60
+ - Updated dependencies [cc971eabfc]
61
+ - Updated dependencies [5b9049f]
62
+ - Updated dependencies [6bda14ed71]
63
+ - Updated dependencies [92004d1]
64
+ - Updated dependencies [b8bbe036c7]
65
+ - Updated dependencies [40ed587]
66
+ - Updated dependencies [87c1ff8]
67
+ - Updated dependencies [d5a31df781]
68
+ - Updated dependencies [dda38c9]
69
+ - Updated dependencies [102d32e4ba]
70
+ - Updated dependencies [8b8e1bb571]
71
+ - Updated dependencies [3bbea92b2a]
72
+ - Updated dependencies [f179749]
73
+ - Updated dependencies [abf3421]
74
+ - Updated dependencies [543be9558e]
75
+ - Updated dependencies [14b712d]
76
+ - @modern-js/utils@2.0.0-beta.1
77
+ - @modern-js/types@2.0.0-beta.1
78
+ - @modern-js/plugin@2.0.0-beta.1
79
+
80
+ ## 2.0.0-beta.0
81
+
82
+ ### Major Changes
83
+
84
+ - dda38c9: chore: v2
85
+
86
+ ### Minor Changes
24
87
 
25
- ## 1.21.3
88
+ - c9e800d39: feat: support React18 streaming SSR
89
+ feat: 支持 React18 流式 SSR
90
+ - 543be95: feat: compile server loader and support handle loader request
91
+ feat: 编译 server loader 并支持处理 loader 的请求
26
92
 
27
93
  ### Patch Changes
28
94
 
29
- - @modern-js/webpack@1.21.3
30
- - @modern-js/plugin@1.21.3
31
- - @modern-js/utils@1.21.3
95
+ - b18fa8f: feat: remove @loadable/component in streaming ssr
96
+ feat: 移除 streaming ssr 中的 @loadable/component 逻辑
97
+ - a2509bf: feat: bump esbuild from 0.14.38 to 0.15.7
98
+
99
+ feat: 将 esbuild 从 0.14.38 版本升级至 0.15.7 版本
100
+
101
+ - 4369648ae: fix: fix html template of streaming ssr
102
+ fix: 修复流式渲染的 html 模版
103
+ - 6bda14ed7: feat: refactor router with react-router@6.4
104
+
105
+ feat: 使用 react-router@6.4 重构路由模块
106
+
107
+ - 60d5378: fix: function extname should not return array
108
+ fix: 函数 extname 不应该返回一个数组
109
+ - 8b8e1bb57: feat: support nested routes
110
+ feat: 支持嵌套路由
111
+ - 3bbea92b2: feat: support Hook、Middleware new API
112
+ feat: 支持 Hook、Middleware 的新 API
113
+ - fcace5b5b: fix: remove overmuch `@modernjs/utils` dependency import in ssr runtime & SSR hydrate error
114
+ fix: 去除 ssr 运行时过多的 `@modernjs/utils` 依赖引入 & SSR hydrate 错误
115
+ - Updated dependencies [edd1cfb1a]
116
+ - Updated dependencies [cc971eabf]
117
+ - Updated dependencies [5b9049f]
118
+ - Updated dependencies [6bda14ed7]
119
+ - Updated dependencies [b8bbe036c]
120
+ - Updated dependencies [d5a31df78]
121
+ - Updated dependencies [dda38c9]
122
+ - Updated dependencies [102d32e4b]
123
+ - Updated dependencies [8b8e1bb57]
124
+ - Updated dependencies [3bbea92b2]
125
+ - Updated dependencies [abf3421]
126
+ - Updated dependencies [543be95]
127
+ - Updated dependencies [14b712d]
128
+ - @modern-js/utils@2.0.0-beta.0
129
+ - @modern-js/types@2.0.0-beta.0
130
+ - @modern-js/plugin@2.0.0-beta.0
32
131
 
33
132
  ## 1.21.2
34
133
 
@@ -3,10 +3,11 @@ import { PLUGIN_SCHEMAS, cleanRequireCache, isReact18 } from '@modern-js/utils';
3
3
  import PluginState from "../state/cli";
4
4
  import PluginSSR from "../ssr/cli";
5
5
  import PluginRouter from "../router/cli";
6
+ import Document from "../document/cli";
6
7
  export default (() => ({
7
8
  name: '@modern-js/runtime',
8
- post: ['@modern-js/plugin-router', '@modern-js/plugin-ssr', '@modern-js/plugin-state', '@modern-js/plugin-design-token'],
9
- usePlugins: [PluginState(), PluginRouter(), PluginSSR()],
9
+ post: ['@modern-js/plugin-router', '@modern-js/plugin-ssr', '@modern-js/plugin-document', '@modern-js/plugin-state', '@modern-js/plugin-design-token'],
10
+ usePlugins: [PluginState(), PluginSSR(), PluginRouter(), Document()],
10
11
  setup: api => {
11
12
  return {
12
13
  config() {
@@ -28,15 +29,12 @@ export default (() => ({
28
29
  }
29
30
  };
30
31
  },
31
-
32
32
  validateSchema() {
33
33
  return PLUGIN_SCHEMAS['@modern-js/runtime'];
34
34
  },
35
-
36
35
  async beforeRestart() {
37
36
  cleanRequireCache([require.resolve("../state/cli"), require.resolve("../router/cli"), require.resolve("../ssr/cli")]);
38
37
  }
39
-
40
38
  };
41
39
  }
42
40
  }));
@@ -1,5 +1,6 @@
1
1
  const APP_CONFIG_SYMBOL = 'config';
2
- export const getConfig = Component => // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
+ export const getConfig = Component =>
3
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3
4
  // @ts-expect-error
4
5
  Component[APP_CONFIG_SYMBOL];
5
6
  export const defineConfig = (Component, config) => {
@@ -1,15 +1,9 @@
1
1
  const _excluded = ["context"];
2
-
3
2
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
4
-
5
3
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
6
-
7
4
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8
-
9
5
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
10
-
11
6
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
12
-
13
7
  import React, { useContext, useMemo } from 'react';
14
8
  import defaultReactDOM from 'react-dom';
15
9
  import hoistNonReactStatics from 'hoist-non-react-statics';
@@ -18,19 +12,17 @@ import { runtime } from "./plugin";
18
12
  import { createLoaderManager } from "./loader/loaderManager";
19
13
  import { jsx as _jsx } from "react/jsx-runtime";
20
14
  const IS_REACT18 = process.env.IS_REACT18 === 'true';
21
-
15
+ const ROUTE_MANIFEST = `_MODERNJS_ROUTE_MANIFEST`;
22
16
  function isClientArgs(id) {
23
17
  return typeof id === 'string' || typeof HTMLElement !== 'undefined' && id instanceof HTMLElement;
24
18
  }
25
-
26
19
  const runnerMap = new WeakMap();
27
-
28
20
  const getInitialContext = runner => ({
29
21
  loaderManager: createLoaderManager({}),
30
22
  runner,
31
- isBrowser: true
23
+ isBrowser: true,
24
+ routeManifest: typeof window !== 'undefined' && window[ROUTE_MANIFEST]
32
25
  });
33
-
34
26
  export const createApp = ({
35
27
  plugins
36
28
  }) => {
@@ -38,7 +30,6 @@ export const createApp = ({
38
30
  appRuntime.usePlugin(...plugins);
39
31
  return App => {
40
32
  const runner = appRuntime.init();
41
-
42
33
  const WrapperComponent = props => {
43
34
  const element = /*#__PURE__*/React.createElement(App || React.Fragment, _objectSpread({}, props), props.children);
44
35
  const context = useContext(RuntimeReactContext);
@@ -52,11 +43,9 @@ export const createApp = ({
52
43
  }) => element
53
44
  });
54
45
  };
55
-
56
46
  if (App) {
57
47
  hoistNonReactStatics(WrapperComponent, App);
58
48
  }
59
-
60
49
  const HOCApp = runner.hoc({
61
50
  App: WrapperComponent
62
51
  }, {
@@ -65,14 +54,13 @@ export const createApp = ({
65
54
  }) => {
66
55
  const WrapComponent = _ref => {
67
56
  var _contextValue;
68
-
69
57
  let {
70
- context
71
- } = _ref,
72
- props = _objectWithoutProperties(_ref, _excluded);
73
-
74
- let contextValue = context; // We should construct the context, when root component is not passed into `bootstrap`.
58
+ context
59
+ } = _ref,
60
+ props = _objectWithoutProperties(_ref, _excluded);
61
+ let contextValue = context;
75
62
 
63
+ // We should construct the context, when root component is not passed into `bootstrap`.
76
64
  if (!((_contextValue = contextValue) !== null && _contextValue !== void 0 && _contextValue.runner)) {
77
65
  contextValue = getInitialContext(runner);
78
66
  runner.init({
@@ -82,18 +70,15 @@ export const createApp = ({
82
70
  context: context1
83
71
  }) => {
84
72
  var _App$init;
85
-
86
73
  return App === null || App === void 0 ? void 0 : (_App$init = App.init) === null || _App$init === void 0 ? void 0 : _App$init.call(App, context1);
87
74
  }
88
75
  });
89
76
  }
90
-
91
77
  return /*#__PURE__*/_jsx(RuntimeReactContext.Provider, {
92
78
  value: contextValue,
93
79
  children: /*#__PURE__*/_jsx(App, _objectSpread({}, props))
94
80
  });
95
81
  };
96
-
97
82
  return hoistNonReactStatics(WrapComponent, App);
98
83
  }
99
84
  });
@@ -110,19 +95,20 @@ id,
110
95
  /**
111
96
  * root.render need use root to run function
112
97
  */
113
- root, ReactDOM = defaultReactDOM) => {
98
+ root, ReactDOM = defaultReactDOM
99
+ // eslint-disable-next-line consistent-return
100
+ ) => {
114
101
  let App = BootApp;
115
- let runner = runnerMap.get(App); // ensure Component used is created by `createApp`
102
+ let runner = runnerMap.get(App);
116
103
 
104
+ // ensure Component used is created by `createApp`
117
105
  if (!runner) {
118
106
  App = createApp({
119
107
  plugins: []
120
108
  })(App);
121
109
  runner = runnerMap.get(App);
122
110
  }
123
-
124
111
  const context = getInitialContext(runner);
125
-
126
112
  const runInit = _context => runner.init({
127
113
  context: _context
128
114
  }, {
@@ -130,33 +116,27 @@ root, ReactDOM = defaultReactDOM) => {
130
116
  context: context1
131
117
  }) => {
132
118
  var _App, _App$init2;
133
-
134
119
  return (_App = App) === null || _App === void 0 ? void 0 : (_App$init2 = _App.init) === null || _App$init2 === void 0 ? void 0 : _App$init2.call(_App, context1);
135
120
  }
136
- }); // don't mount the App, let user in charge of it.
137
-
121
+ });
138
122
 
123
+ // don't mount the App, let user in charge of it.
139
124
  if (!id) {
140
125
  return /*#__PURE__*/React.createElement(App, {
141
126
  context
142
127
  });
143
128
  }
144
-
145
129
  const isBrowser = typeof window !== 'undefined' && window.name !== 'nodejs';
146
-
147
130
  if (isBrowser) {
148
131
  if (isClientArgs(id)) {
149
132
  var _ssrData$data, _ssrData$data2;
150
-
151
133
  const ssrData = window._SSR_DATA;
152
134
  const loadersData = (ssrData === null || ssrData === void 0 ? void 0 : (_ssrData$data = ssrData.data) === null || _ssrData$data === void 0 ? void 0 : _ssrData$data.loadersData) || {};
153
135
  const initialLoadersState = Object.keys(loadersData).reduce((res, key) => {
154
136
  const loaderData = loadersData[key];
155
-
156
137
  if (loaderData.loading !== false) {
157
138
  return res;
158
139
  }
159
-
160
140
  res[key] = loaderData;
161
141
  return res;
162
142
  }, {});
@@ -169,13 +149,12 @@ root, ReactDOM = defaultReactDOM) => {
169
149
  } : {}));
170
150
  context.initialData = ssrData === null || ssrData === void 0 ? void 0 : (_ssrData$data2 = ssrData.data) === null || _ssrData$data2 === void 0 ? void 0 : _ssrData$data2.initialData;
171
151
  const initialData = await runInit(context);
172
-
173
152
  if (initialData) {
174
153
  context.initialData = initialData;
175
154
  }
155
+ const rootElement = typeof id !== 'string' ? id : document.getElementById(id || 'root');
176
156
 
177
- const rootElement = typeof id !== 'string' ? id : document.getElementById(id || 'root'); // https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html
178
-
157
+ // https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html
179
158
  const ModernRender = App => {
180
159
  if (IS_REACT18) {
181
160
  if (root) {
@@ -189,27 +168,22 @@ root, ReactDOM = defaultReactDOM) => {
189
168
  if (!ReactDOM.render) {
190
169
  throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `render` method');
191
170
  }
192
-
193
171
  ReactDOM.render(App, rootElement);
194
172
  }
195
173
  };
196
-
197
174
  const ModernHydrate = (App, callback) => {
198
175
  if (IS_REACT18) {
199
176
  if (!ReactDOM.hydrateRoot) {
200
177
  throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `hydrateRoot` method');
201
178
  }
202
-
203
179
  ReactDOM.hydrateRoot(rootElement, App);
204
180
  } else {
205
181
  if (!ReactDOM.hydrate) {
206
182
  throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `hydrate` method');
207
183
  }
208
-
209
184
  ReactDOM.hydrate(App, rootElement, callback);
210
185
  }
211
186
  };
212
-
213
187
  return runner.client({
214
188
  App,
215
189
  context,
@@ -237,12 +211,37 @@ root, ReactDOM = defaultReactDOM) => {
237
211
  skipStatic: process.env.NODE_ENV === 'production' && !id.staticGenerate
238
212
  })
239
213
  });
214
+
215
+ // Handle redirects from React Router with an HTTP redirect
216
+ const isRedirectResponse = result => {
217
+ if (typeof Response !== 'undefined' &&
218
+ // fix: ssg workflow doesn't inject Web Response
219
+ result instanceof Response && result.status >= 300 && result.status <= 399) {
220
+ const {
221
+ status
222
+ } = result;
223
+ const redirectUrl = result.headers.get('Location') || '/';
224
+ const {
225
+ ssrContext
226
+ } = context;
227
+ if (ssrContext) {
228
+ ssrContext.res.statusCode = status;
229
+ ssrContext.res.setHeader('Location', redirectUrl);
230
+ ssrContext.redirection.status = status;
231
+ ssrContext.redirection.url = redirectUrl;
232
+ }
233
+ return true;
234
+ }
235
+ return false;
236
+ };
240
237
  const initialData = await runInit(context);
241
- context.initialData = initialData;
242
- return runner.server({
243
- App,
244
- context
245
- });
238
+ if (!isRedirectResponse(initialData)) {
239
+ context.initialData = initialData;
240
+ return runner.server({
241
+ App,
242
+ context
243
+ });
244
+ }
246
245
  }
247
246
  };
248
247
  export const useRuntimeContext = () => {
@@ -1,7 +1,8 @@
1
- export { createPlugin, createRuntime, runtime, registerInit, registerPrefetch } from "./plugin";
2
- export { defineConfig, getConfig } from "./app-config"; // compatible
1
+ export { createPlugin, createRuntime, runtime, registerInit } from "./plugin";
2
+ export { defineConfig, getConfig } from "./app-config";
3
3
 
4
+ // compatible
4
5
  export * from "./compatible";
5
- export { RuntimeReactContext } from "../runtime-context";
6
+ export { RuntimeReactContext, ServerRouterContext } from "../runtime-context";
6
7
  export * from "./loader";
7
8
  export * from '@modern-js/plugin';
@@ -1,5 +1,4 @@
1
1
  import invariant from 'invariant';
2
-
3
2
  /**
4
3
  * Calc id from string or object
5
4
  */
@@ -7,28 +6,24 @@ const createGetId = () => {
7
6
  const idCache = new Map();
8
7
  return objectId => {
9
8
  const cachedId = idCache.get(objectId);
10
-
11
9
  if (cachedId) {
12
10
  return cachedId;
13
- } // WARNING: id should be unique after serialize.
14
-
11
+ }
15
12
 
13
+ // WARNING: id should be unique after serialize.
16
14
  const id = JSON.stringify(objectId);
17
15
  invariant(id, 'params should be not null value');
18
16
  idCache.set(objectId, id);
19
17
  return id;
20
18
  };
21
19
  };
22
-
23
20
  export let LoaderStatus;
24
-
25
21
  (function (LoaderStatus) {
26
22
  LoaderStatus[LoaderStatus["idle"] = 0] = "idle";
27
23
  LoaderStatus[LoaderStatus["loading"] = 1] = "loading";
28
24
  LoaderStatus[LoaderStatus["fulfilled"] = 2] = "fulfilled";
29
25
  LoaderStatus[LoaderStatus["rejected"] = 3] = "rejected";
30
26
  })(LoaderStatus || (LoaderStatus = {}));
31
-
32
27
  const createLoader = (id, initialData = {
33
28
  loading: false,
34
29
  reloading: false,
@@ -43,16 +38,13 @@ const createLoader = (id, initialData = {
43
38
  } = initialData;
44
39
  let hasLoaded = false;
45
40
  const handlers = new Set();
46
-
47
41
  const load = async () => {
48
42
  if (skip) {
49
43
  return promise;
50
44
  }
51
-
52
45
  if (status === LoaderStatus.loading) {
53
46
  return promise;
54
47
  }
55
-
56
48
  status = LoaderStatus.loading;
57
49
  notify();
58
50
  promise = loaderFn().then(value => {
@@ -70,7 +62,6 @@ const createLoader = (id, initialData = {
70
62
  });
71
63
  return promise;
72
64
  };
73
-
74
65
  const getResult = () => ({
75
66
  loading: !hasLoaded && status === LoaderStatus.loading,
76
67
  reloading: hasLoaded && status === LoaderStatus.loading,
@@ -79,35 +70,29 @@ const createLoader = (id, initialData = {
79
70
  // redundant fields for ssr log
80
71
  _error: error
81
72
  });
82
-
83
73
  const notify = () => {
84
74
  // don't iterate handlers directly, since it could be modified during iteration
85
75
  [...handlers].forEach(handler => {
86
76
  handler(status, getResult());
87
77
  });
88
78
  };
89
-
90
79
  const onChange = handler => {
91
80
  handlers.add(handler);
92
81
  return () => {
93
82
  handlers.delete(handler);
94
83
  };
95
84
  };
96
-
97
85
  return {
98
86
  get result() {
99
87
  return getResult();
100
88
  },
101
-
102
89
  get promise() {
103
90
  return promise;
104
91
  },
105
-
106
92
  onChange,
107
93
  load
108
94
  };
109
95
  };
110
-
111
96
  /**
112
97
  * Create loaders manager. It's returned instance will add to context
113
98
  * @param initialDataMap used to initialing loader data
@@ -119,67 +104,60 @@ export const createLoaderManager = (initialDataMap, managerOptions = {}) => {
119
104
  } = managerOptions;
120
105
  const loadersMap = new Map();
121
106
  const getId = createGetId();
122
-
123
107
  const add = (loaderFn, loaderOptions) => {
124
108
  const id = getId(loaderOptions.params);
125
- let loader = loadersMap.get(id); // private property for opting out loader cache, maybe change in future
109
+ let loader = loadersMap.get(id);
126
110
 
111
+ // private property for opting out loader cache, maybe change in future
127
112
  const cache = loaderOptions._cache;
128
-
129
113
  if (!loader || cache === false) {
130
114
  // ignore non-static loader on static phase
131
- const ignoreNonStatic = skipNonStatic && !loaderOptions.static; // ignore static loader on non-static phase
115
+ const ignoreNonStatic = skipNonStatic && !loaderOptions.static;
132
116
 
117
+ // ignore static loader on non-static phase
133
118
  const ignoreStatic = skipStatic && loaderOptions.static;
134
119
  const skipExec = ignoreNonStatic || ignoreStatic;
135
120
  loader = createLoader(id, typeof initialDataMap[id] !== 'undefined' ? initialDataMap[id] : {
136
121
  data: loaderOptions.initialData
137
- }, loaderFn, // Todo whether static loader is exec when CSR
122
+ }, loaderFn,
123
+ // Todo whether static loader is exec when CSR
138
124
  skipExec);
139
125
  loadersMap.set(id, loader);
140
126
  }
141
-
142
127
  return id;
143
128
  };
129
+ const get = id => loadersMap.get(id);
144
130
 
145
- const get = id => loadersMap.get(id); // check if there has pending loaders
146
-
147
-
131
+ // check if there has pending loaders
148
132
  const hasPendingLoaders = () => {
149
133
  for (const loader of loadersMap.values()) {
150
134
  const {
151
135
  promise
152
136
  } = loader;
153
-
154
137
  if (promise instanceof Promise) {
155
138
  return true;
156
139
  }
157
140
  }
158
-
159
141
  return false;
160
- }; // waiting for all pending loaders to be settled
161
-
142
+ };
162
143
 
144
+ // waiting for all pending loaders to be settled
163
145
  const awaitPendingLoaders = async () => {
164
146
  const pendingLoaders = [];
165
-
166
147
  for (const [id, loader] of loadersMap) {
167
148
  const {
168
149
  promise
169
150
  } = loader;
170
-
171
151
  if (promise instanceof Promise) {
172
152
  pendingLoaders.push([id, loader]);
173
153
  }
174
154
  }
175
-
176
155
  await Promise.all(pendingLoaders.map(item => item[1].promise));
177
156
  return pendingLoaders.reduce((res, [id, loader]) => {
178
157
  res[id] = loader.result;
179
158
  return res;
180
159
  }, {});
181
160
  };
182
-
183
161
  return {
184
162
  hasPendingLoaders,
185
163
  awaitPendingLoaders,