@modern-js/runtime 2.0.0-beta.0 → 2.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/CHANGELOG.md +158 -0
  2. package/dist/js/modern/cli/index.js +6 -6
  3. package/dist/js/modern/core/app-config.js +2 -1
  4. package/dist/js/modern/core/compatible.js +66 -48
  5. package/dist/js/modern/core/index.js +3 -2
  6. package/dist/js/modern/core/loader/loaderManager.js +12 -34
  7. package/dist/js/modern/core/loader/useLoader.js +8 -26
  8. package/dist/js/modern/core/plugin.js +6 -28
  9. package/dist/js/modern/document/Body.js +17 -0
  10. package/dist/js/modern/document/DocumentContext.js +6 -0
  11. package/dist/js/modern/document/DocumentStructrueContext.js +7 -0
  12. package/dist/js/modern/document/Head.js +24 -0
  13. package/dist/js/modern/document/Html.js +92 -0
  14. package/dist/js/modern/document/Root.js +31 -0
  15. package/dist/js/modern/document/Scripts.js +10 -0
  16. package/dist/js/modern/document/cli/index.js +132 -0
  17. package/dist/js/modern/document/constants.js +19 -0
  18. package/dist/js/modern/document/index.js +8 -0
  19. package/dist/js/modern/index.js +1 -1
  20. package/dist/js/modern/router/cli/index.js +0 -16
  21. package/dist/js/modern/router/runtime/plugin.js +0 -9
  22. package/dist/js/modern/router/runtime/plugin.node.js +18 -24
  23. package/dist/js/modern/router/runtime/root/index.js +19 -0
  24. package/dist/js/modern/router/runtime/root/load.js +61 -0
  25. package/dist/js/modern/router/runtime/utils.js +16 -35
  26. package/dist/js/modern/router/runtime/withRouter.js +1 -3
  27. package/dist/js/modern/ssr/cli/index.js +2 -23
  28. package/dist/js/modern/ssr/index.js +23 -34
  29. package/dist/js/modern/ssr/index.node.js +0 -13
  30. package/dist/js/modern/ssr/prefetch.js +0 -7
  31. package/dist/js/modern/ssr/react/prerender/index.js +2 -23
  32. package/dist/js/modern/ssr/react/prerender/util.js +2 -17
  33. package/dist/js/modern/ssr/react/withCallback/index.js +0 -1
  34. package/dist/js/modern/ssr/serverRender/helmet.js +12 -20
  35. package/dist/js/modern/ssr/serverRender/index.js +1 -2
  36. package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -5
  37. package/dist/js/modern/ssr/serverRender/renderToStream/bulidTemplate.before.js +45 -11
  38. package/dist/js/modern/ssr/serverRender/renderToStream/index.js +6 -39
  39. package/dist/js/modern/ssr/serverRender/renderToStream/loadable.js +0 -2
  40. package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.js +26 -15
  41. package/dist/js/modern/ssr/serverRender/renderToStream/template.js +14 -18
  42. package/dist/js/modern/ssr/serverRender/renderToString/entry.js +2 -34
  43. package/dist/js/modern/ssr/serverRender/renderToString/index.js +0 -2
  44. package/dist/js/modern/ssr/serverRender/renderToString/loadable.js +0 -10
  45. package/dist/js/modern/ssr/serverRender/renderToString/reduce.js +0 -2
  46. package/dist/js/modern/ssr/serverRender/renderToString/template.js +0 -15
  47. package/dist/js/modern/ssr/serverRender/renderToString/type.js +0 -1
  48. package/dist/js/modern/ssr/serverRender/utils.js +2 -6
  49. package/dist/js/modern/ssr/utils.js +0 -11
  50. package/dist/js/modern/state/cli/index.js +0 -11
  51. package/dist/js/modern/state/runtime/plugin.js +1 -14
  52. package/dist/js/node/cli/index.js +6 -14
  53. package/dist/js/node/common.js +0 -2
  54. package/dist/js/node/core/app-config.js +2 -5
  55. package/dist/js/node/core/compatible.js +66 -66
  56. package/dist/js/node/core/index.js +0 -16
  57. package/dist/js/node/core/loader/index.js +0 -2
  58. package/dist/js/node/core/loader/loaderManager.js +12 -37
  59. package/dist/js/node/core/loader/useLoader.js +8 -31
  60. package/dist/js/node/core/plugin.js +5 -34
  61. package/dist/js/node/document/Body.js +26 -0
  62. package/dist/js/node/document/DocumentContext.js +14 -0
  63. package/dist/js/node/document/DocumentStructrueContext.js +15 -0
  64. package/dist/js/node/document/Head.js +33 -0
  65. package/dist/js/node/document/Html.js +98 -0
  66. package/dist/js/node/document/Root.js +41 -0
  67. package/dist/js/node/document/Scripts.js +17 -0
  68. package/dist/js/node/document/cli/index.js +142 -0
  69. package/dist/js/node/document/constants.js +36 -0
  70. package/dist/js/node/document/index.js +93 -0
  71. package/dist/js/node/exports/head.js +0 -5
  72. package/dist/js/node/exports/loadable.js +0 -5
  73. package/dist/js/node/exports/server.js +0 -2
  74. package/dist/js/node/exports/styled.js +0 -5
  75. package/dist/js/node/index.js +0 -8
  76. package/dist/js/node/router/cli/index.js +0 -20
  77. package/dist/js/node/router/index.js +0 -4
  78. package/dist/js/node/router/runtime/DefaultNotFound.js +1 -5
  79. package/dist/js/node/router/runtime/index.js +0 -5
  80. package/dist/js/node/router/runtime/plugin.js +0 -17
  81. package/dist/js/node/router/runtime/plugin.node.js +16 -38
  82. package/dist/js/node/router/runtime/root/index.js +26 -0
  83. package/dist/js/node/router/runtime/root/load.js +69 -0
  84. package/dist/js/node/router/runtime/utils.js +16 -44
  85. package/dist/js/node/router/runtime/withRouter.js +0 -9
  86. package/dist/js/node/runtime-context.js +0 -2
  87. package/dist/js/node/ssr/cli/index.js +2 -26
  88. package/dist/js/node/ssr/index.js +23 -45
  89. package/dist/js/node/ssr/index.node.js +0 -23
  90. package/dist/js/node/ssr/prefetch.js +0 -11
  91. package/dist/js/node/ssr/react/index.js +0 -2
  92. package/dist/js/node/ssr/react/nossr/index.js +0 -6
  93. package/dist/js/node/ssr/react/prerender/index.js +2 -30
  94. package/dist/js/node/ssr/react/prerender/util.js +2 -25
  95. package/dist/js/node/ssr/react/withCallback/index.js +1 -4
  96. package/dist/js/node/ssr/serverRender/helmet.js +13 -20
  97. package/dist/js/node/ssr/serverRender/index.js +1 -4
  98. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -9
  99. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.share.js +0 -1
  100. package/dist/js/node/ssr/serverRender/renderToStream/bulidTemplate.before.js +43 -15
  101. package/dist/js/node/ssr/serverRender/renderToStream/index.js +6 -48
  102. package/dist/js/node/ssr/serverRender/renderToStream/loadable.js +0 -4
  103. package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.js +26 -17
  104. package/dist/js/node/ssr/serverRender/renderToStream/styledComponent.js +0 -2
  105. package/dist/js/node/ssr/serverRender/renderToStream/template.js +16 -23
  106. package/dist/js/node/ssr/serverRender/renderToString/entry.js +2 -51
  107. package/dist/js/node/ssr/serverRender/renderToString/index.js +0 -10
  108. package/dist/js/node/ssr/serverRender/renderToString/loadable.js +0 -14
  109. package/dist/js/node/ssr/serverRender/renderToString/reduce.js +0 -3
  110. package/dist/js/node/ssr/serverRender/renderToString/styledComponent.js +0 -3
  111. package/dist/js/node/ssr/serverRender/renderToString/template.js +0 -18
  112. package/dist/js/node/ssr/serverRender/renderToString/type.js +0 -1
  113. package/dist/js/node/ssr/serverRender/types.js +0 -1
  114. package/dist/js/node/ssr/serverRender/utils.js +2 -8
  115. package/dist/js/node/ssr/utils.js +0 -20
  116. package/dist/js/node/state/cli/index.js +0 -16
  117. package/dist/js/node/state/index.js +0 -4
  118. package/dist/js/node/state/plugins.js +0 -11
  119. package/dist/js/node/state/runtime/index.js +0 -7
  120. package/dist/js/node/state/runtime/plugin.js +1 -25
  121. package/dist/js/treeshaking/cli/index.js +6 -4
  122. package/dist/js/treeshaking/core/app-config.js +2 -1
  123. package/dist/js/treeshaking/core/compatible.js +74 -81
  124. package/dist/js/treeshaking/core/index.js +3 -2
  125. package/dist/js/treeshaking/core/loader/loaderManager.js +19 -51
  126. package/dist/js/treeshaking/core/loader/useLoader.js +11 -28
  127. package/dist/js/treeshaking/core/plugin.js +6 -51
  128. package/dist/js/treeshaking/document/Body.js +14 -0
  129. package/dist/js/treeshaking/document/DocumentContext.js +6 -0
  130. package/dist/js/treeshaking/document/DocumentStructrueContext.js +7 -0
  131. package/dist/js/treeshaking/document/Head.js +21 -0
  132. package/dist/js/treeshaking/document/Html.js +104 -0
  133. package/dist/js/treeshaking/document/Root.js +24 -0
  134. package/dist/js/treeshaking/document/Scripts.js +10 -0
  135. package/dist/js/treeshaking/document/cli/index.js +175 -0
  136. package/dist/js/treeshaking/document/constants.js +16 -0
  137. package/dist/js/treeshaking/document/index.js +8 -0
  138. package/dist/js/treeshaking/index.js +1 -1
  139. package/dist/js/treeshaking/router/cli/index.js +6 -18
  140. package/dist/js/treeshaking/router/runtime/plugin.js +5 -13
  141. package/dist/js/treeshaking/router/runtime/plugin.node.js +23 -36
  142. package/dist/js/treeshaking/router/runtime/root/index.js +17 -0
  143. package/dist/js/treeshaking/router/runtime/root/load.js +102 -0
  144. package/dist/js/treeshaking/router/runtime/utils.js +21 -39
  145. package/dist/js/treeshaking/router/runtime/withRouter.js +1 -0
  146. package/dist/js/treeshaking/ssr/cli/index.js +9 -31
  147. package/dist/js/treeshaking/ssr/index.js +26 -40
  148. package/dist/js/treeshaking/ssr/index.node.js +12 -29
  149. package/dist/js/treeshaking/ssr/prefetch.js +0 -13
  150. package/dist/js/treeshaking/ssr/react/nossr/index.js +3 -4
  151. package/dist/js/treeshaking/ssr/react/prerender/index.js +2 -21
  152. package/dist/js/treeshaking/ssr/react/prerender/util.js +3 -20
  153. package/dist/js/treeshaking/ssr/react/withCallback/index.js +1 -2
  154. package/dist/js/treeshaking/ssr/serverRender/helmet.js +12 -11
  155. package/dist/js/treeshaking/ssr/serverRender/index.js +1 -9
  156. package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -6
  157. package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +46 -15
  158. package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +9 -79
  159. package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +3 -5
  160. package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +46 -35
  161. package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +17 -24
  162. package/dist/js/treeshaking/ssr/serverRender/renderToString/entry.js +20 -73
  163. package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +2 -6
  164. package/dist/js/treeshaking/ssr/serverRender/renderToString/loadable.js +5 -16
  165. package/dist/js/treeshaking/ssr/serverRender/renderToString/reduce.js +0 -2
  166. package/dist/js/treeshaking/ssr/serverRender/renderToString/template.js +2 -18
  167. package/dist/js/treeshaking/ssr/serverRender/renderToString/type.js +0 -1
  168. package/dist/js/treeshaking/ssr/serverRender/utils.js +5 -10
  169. package/dist/js/treeshaking/ssr/utils.js +8 -17
  170. package/dist/js/treeshaking/state/cli/index.js +3 -11
  171. package/dist/js/treeshaking/state/runtime/plugin.js +2 -10
  172. package/dist/types/cli/index.d.ts +2 -4
  173. package/dist/types/core/compatible.d.ts +8 -10
  174. package/dist/types/core/index.d.ts +1 -1
  175. package/dist/types/core/loader/loaderManager.d.ts +0 -1
  176. package/dist/types/core/loader/useLoader.d.ts +0 -5
  177. package/dist/types/core/plugin.d.ts +16 -28
  178. package/dist/types/document/Body.d.ts +4 -0
  179. package/dist/types/document/DocumentContext.d.ts +13 -0
  180. package/dist/types/document/DocumentStructrueContext.d.ts +10 -0
  181. package/dist/types/document/Head.d.ts +5 -0
  182. package/dist/types/document/Html.d.ts +4 -0
  183. package/dist/types/document/Root.d.ts +8 -0
  184. package/dist/types/document/Scripts.d.ts +2 -0
  185. package/dist/types/document/cli/index.d.ts +3 -0
  186. package/dist/types/document/constants.d.ts +14 -0
  187. package/dist/types/document/index.d.ts +8 -0
  188. package/dist/types/exports/server.d.ts +3 -3
  189. package/dist/types/index.d.ts +1 -1
  190. package/dist/types/router/cli/index.d.ts +2 -4
  191. package/dist/types/router/runtime/root/index.d.ts +8 -0
  192. package/dist/types/router/runtime/root/load.d.ts +22 -0
  193. package/dist/types/router/runtime/types.d.ts +0 -2
  194. package/dist/types/runtime-context.d.ts +1 -0
  195. package/dist/types/ssr/cli/index.d.ts +2 -4
  196. package/dist/types/ssr/prefetch.d.ts +2 -2
  197. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +3 -2
  198. package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +2 -1
  199. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +3 -3
  200. package/dist/types/ssr/serverRender/renderToStream/template.d.ts +2 -2
  201. package/dist/types/ssr/serverRender/types.d.ts +3 -6
  202. package/dist/types/state/cli/index.d.ts +2 -4
  203. package/dist/types/state/types.d.ts +0 -1
  204. package/package.json +24 -15
package/CHANGELOG.md CHANGED
@@ -1,5 +1,163 @@
1
1
  # @modern-js/runtime
2
2
 
3
+ ## 2.0.0-beta.2
4
+
5
+ ### Major Changes
6
+
7
+ - dda38c9c3e: chore: v2
8
+
9
+ ### Minor Changes
10
+
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 的请求
15
+
16
+ ### Patch Changes
17
+
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
+ - b18fa8f3ed: 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
+ - e4357f1: fix: change default document file and name
37
+
38
+ fix: 重置默认的 document 文件和文件名
39
+
40
+ - 4369648ae2: fix: fix html template of streaming ssr
41
+ fix: 修复流式渲染的 html 模版
42
+ - 92c0994: chore: remove `registerPrefetch`
43
+ chore: 移除 `registerPrefetch`
44
+ - 6bda14ed71: feat: refactor router with react-router@6.4
45
+
46
+ feat: 使用 react-router@6.4 重构路由模块
47
+
48
+ - 92004d1: feat: support load chunks parallelly
49
+ feat: 支持并行加载 chunks
50
+ - 40ed587: feat: inject css chunk into html for streaming ssr
51
+ feat: streaming ssr 返回的 html 注入 css chunk
52
+ - 60d5378632: fix: function extname should not return array
53
+ fix: 函数 extname 不应该返回一个数组
54
+ - 8b8e1bb571: feat: support nested routes
55
+ feat: 支持嵌套路由
56
+ - 3bbea92b2a: feat: support Hook、Middleware new API
57
+ feat: 支持 Hook、Middleware 的新 API
58
+ - 18aaf42: fix: fix server loader redirects
59
+ fix: 修复 server loader 重定向错误
60
+ - fcace5b5b9: fix: remove overmuch `@modernjs/utils` dependency import in ssr runtime & SSR hydrate error
61
+ fix: 去除 ssr 运行时过多的 `@modernjs/utils` 依赖引入 & SSR hydrate 错误
62
+ - Updated dependencies [92f0ead]
63
+ - Updated dependencies [edd1cfb1af]
64
+ - Updated dependencies [cc971eabfc]
65
+ - Updated dependencies [5b9049f2e9]
66
+ - Updated dependencies [6bda14ed71]
67
+ - Updated dependencies [92004d1]
68
+ - Updated dependencies [b8bbe036c7]
69
+ - Updated dependencies [40ed587]
70
+ - Updated dependencies [87c1ff8]
71
+ - Updated dependencies [d5a31df781]
72
+ - Updated dependencies [dda38c9c3e]
73
+ - Updated dependencies [102d32e4ba]
74
+ - Updated dependencies [8b8e1bb571]
75
+ - Updated dependencies [3bbea92b2a]
76
+ - Updated dependencies [f179749]
77
+ - Updated dependencies [abf3421a75]
78
+ - Updated dependencies [543be9558e]
79
+ - Updated dependencies [14b712da84]
80
+ - @modern-js/utils@2.0.0-beta.2
81
+ - @modern-js/types@2.0.0-beta.2
82
+ - @modern-js/plugin@2.0.0-beta.2
83
+
84
+ ## 2.0.0-beta.1
85
+
86
+ ### Major Changes
87
+
88
+ - dda38c9: chore: v2
89
+
90
+ ### Minor Changes
91
+
92
+ - c9e800d39a: feat: support React18 streaming SSR
93
+ feat: 支持 React18 流式 SSR
94
+ - 543be9558e: feat: compile server loader and support handle loader request
95
+ feat: 编译 server loader 并支持处理 loader 的请求
96
+
97
+ ### Patch Changes
98
+
99
+ - 2344eb2: fix: bootstrap function params type define
100
+
101
+ fix: 修复 bootstrap 函数参数类型定义
102
+
103
+ - a11fcf8: feat: fallback logic of streaming ssr
104
+ feat: streaming ssr 降级逻辑
105
+ - b18fa8f: feat: remove @loadable/component in streaming ssr
106
+ feat: 移除 streaming ssr 中的 @loadable/component 逻辑
107
+ - 3e57f2b: feat: add document feature with plugin
108
+
109
+ feat: 增加 document 功能插件
110
+
111
+ - fbf5eed: fix: fix ssg failure due to lack of Web Response API
112
+ fix: 修复因为缺少 Web Response API 而导致 ssg 失败
113
+ - a2509bfbdb: feat: bump esbuild from 0.14.38 to 0.15.7
114
+
115
+ feat: 将 esbuild 从 0.14.38 版本升级至 0.15.7 版本
116
+
117
+ - 4369648ae2: fix: fix html template of streaming ssr
118
+ fix: 修复流式渲染的 html 模版
119
+ - 92c0994: chore: remove `registerPrefetch`
120
+ chore: 移除 `registerPrefetch`
121
+ - 6bda14ed71: feat: refactor router with react-router@6.4
122
+
123
+ feat: 使用 react-router@6.4 重构路由模块
124
+
125
+ - 92004d1: feat: support load chunks parallelly
126
+ feat: 支持并行加载 chunks
127
+ - 40ed587: feat: inject css chunk into html for streaming ssr
128
+ feat: streaming ssr 返回的 html 注入 css chunk
129
+ - 60d5378632: fix: function extname should not return array
130
+ fix: 函数 extname 不应该返回一个数组
131
+ - 8b8e1bb571: feat: support nested routes
132
+ feat: 支持嵌套路由
133
+ - 3bbea92b2a: feat: support Hook、Middleware new API
134
+ feat: 支持 Hook、Middleware 的新 API
135
+ - 18aaf42: fix: fix server loader redirects
136
+ fix: 修复 server loader 重定向错误
137
+ - fcace5b5b9: fix: remove overmuch `@modernjs/utils` dependency import in ssr runtime & SSR hydrate error
138
+ fix: 去除 ssr 运行时过多的 `@modernjs/utils` 依赖引入 & SSR hydrate 错误
139
+ - Updated dependencies [92f0ead]
140
+ - Updated dependencies [edd1cfb1af]
141
+ - Updated dependencies [cc971eabfc]
142
+ - Updated dependencies [5b9049f]
143
+ - Updated dependencies [6bda14ed71]
144
+ - Updated dependencies [92004d1]
145
+ - Updated dependencies [b8bbe036c7]
146
+ - Updated dependencies [40ed587]
147
+ - Updated dependencies [87c1ff8]
148
+ - Updated dependencies [d5a31df781]
149
+ - Updated dependencies [dda38c9]
150
+ - Updated dependencies [102d32e4ba]
151
+ - Updated dependencies [8b8e1bb571]
152
+ - Updated dependencies [3bbea92b2a]
153
+ - Updated dependencies [f179749]
154
+ - Updated dependencies [abf3421]
155
+ - Updated dependencies [543be9558e]
156
+ - Updated dependencies [14b712d]
157
+ - @modern-js/utils@2.0.0-beta.1
158
+ - @modern-js/types@2.0.0-beta.1
159
+ - @modern-js/plugin@2.0.0-beta.1
160
+
3
161
  ## 2.0.0-beta.0
4
162
 
5
163
  ### Major Changes
@@ -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(), PluginSSR(), PluginRouter()],
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() {
@@ -24,19 +25,18 @@ export default (() => ({
24
25
  */
25
26
  'styled-components': require.resolve('styled-components')
26
27
  },
27
- envVars: ['IS_REACT18']
28
+ globalVars: {
29
+ 'process.env.IS_REACT18': process.env.IS_REACT18
30
+ }
28
31
  }
29
32
  };
30
33
  },
31
-
32
34
  validateSchema() {
33
35
  return PLUGIN_SCHEMAS['@modern-js/runtime'];
34
36
  },
35
-
36
37
  async beforeRestart() {
37
38
  cleanRequireCache([require.resolve("../state/cli"), require.resolve("../router/cli"), require.resolve("../ssr/cli")]);
38
39
  }
39
-
40
40
  };
41
41
  }
42
42
  }));
@@ -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,36 +1,27 @@
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
- import defaultReactDOM from 'react-dom';
15
8
  import hoistNonReactStatics from 'hoist-non-react-statics';
16
9
  import { RuntimeReactContext } from "../runtime-context";
17
10
  import { runtime } from "./plugin";
18
11
  import { createLoaderManager } from "./loader/loaderManager";
19
12
  import { jsx as _jsx } from "react/jsx-runtime";
20
13
  const IS_REACT18 = process.env.IS_REACT18 === 'true';
21
-
14
+ const ROUTE_MANIFEST = `_MODERNJS_ROUTE_MANIFEST`;
22
15
  function isClientArgs(id) {
23
16
  return typeof id === 'string' || typeof HTMLElement !== 'undefined' && id instanceof HTMLElement;
24
17
  }
25
-
26
18
  const runnerMap = new WeakMap();
27
-
28
19
  const getInitialContext = runner => ({
29
20
  loaderManager: createLoaderManager({}),
30
21
  runner,
31
- isBrowser: true
22
+ isBrowser: true,
23
+ routeManifest: typeof window !== 'undefined' && window[ROUTE_MANIFEST]
32
24
  });
33
-
34
25
  export const createApp = ({
35
26
  plugins
36
27
  }) => {
@@ -38,7 +29,6 @@ export const createApp = ({
38
29
  appRuntime.usePlugin(...plugins);
39
30
  return App => {
40
31
  const runner = appRuntime.init();
41
-
42
32
  const WrapperComponent = props => {
43
33
  const element = /*#__PURE__*/React.createElement(App || React.Fragment, _objectSpread({}, props), props.children);
44
34
  const context = useContext(RuntimeReactContext);
@@ -52,11 +42,9 @@ export const createApp = ({
52
42
  }) => element
53
43
  });
54
44
  };
55
-
56
45
  if (App) {
57
46
  hoistNonReactStatics(WrapperComponent, App);
58
47
  }
59
-
60
48
  const HOCApp = runner.hoc({
61
49
  App: WrapperComponent
62
50
  }, {
@@ -65,14 +53,13 @@ export const createApp = ({
65
53
  }) => {
66
54
  const WrapComponent = _ref => {
67
55
  var _contextValue;
68
-
69
56
  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`.
57
+ context
58
+ } = _ref,
59
+ props = _objectWithoutProperties(_ref, _excluded);
60
+ let contextValue = context;
75
61
 
62
+ // We should construct the context, when root component is not passed into `bootstrap`.
76
63
  if (!((_contextValue = contextValue) !== null && _contextValue !== void 0 && _contextValue.runner)) {
77
64
  contextValue = getInitialContext(runner);
78
65
  runner.init({
@@ -82,18 +69,15 @@ export const createApp = ({
82
69
  context: context1
83
70
  }) => {
84
71
  var _App$init;
85
-
86
72
  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
73
  }
88
74
  });
89
75
  }
90
-
91
76
  return /*#__PURE__*/_jsx(RuntimeReactContext.Provider, {
92
77
  value: contextValue,
93
78
  children: /*#__PURE__*/_jsx(App, _objectSpread({}, props))
94
79
  });
95
80
  };
96
-
97
81
  return hoistNonReactStatics(WrapComponent, App);
98
82
  }
99
83
  });
@@ -110,19 +94,20 @@ id,
110
94
  /**
111
95
  * root.render need use root to run function
112
96
  */
113
- root, ReactDOM = defaultReactDOM) => {
97
+ root, ReactDOM
98
+ // eslint-disable-next-line consistent-return
99
+ ) => {
114
100
  let App = BootApp;
115
- let runner = runnerMap.get(App); // ensure Component used is created by `createApp`
101
+ let runner = runnerMap.get(App);
116
102
 
103
+ // ensure Component used is created by `createApp`
117
104
  if (!runner) {
118
105
  App = createApp({
119
106
  plugins: []
120
107
  })(App);
121
108
  runner = runnerMap.get(App);
122
109
  }
123
-
124
110
  const context = getInitialContext(runner);
125
-
126
111
  const runInit = _context => runner.init({
127
112
  context: _context
128
113
  }, {
@@ -130,33 +115,27 @@ root, ReactDOM = defaultReactDOM) => {
130
115
  context: context1
131
116
  }) => {
132
117
  var _App, _App$init2;
133
-
134
118
  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
119
  }
136
- }); // don't mount the App, let user in charge of it.
137
-
120
+ });
138
121
 
122
+ // don't mount the App, let user in charge of it.
139
123
  if (!id) {
140
124
  return /*#__PURE__*/React.createElement(App, {
141
125
  context
142
126
  });
143
127
  }
144
-
145
128
  const isBrowser = typeof window !== 'undefined' && window.name !== 'nodejs';
146
-
147
129
  if (isBrowser) {
148
130
  if (isClientArgs(id)) {
149
131
  var _ssrData$data, _ssrData$data2;
150
-
151
132
  const ssrData = window._SSR_DATA;
152
133
  const loadersData = (ssrData === null || ssrData === void 0 ? void 0 : (_ssrData$data = ssrData.data) === null || _ssrData$data === void 0 ? void 0 : _ssrData$data.loadersData) || {};
153
134
  const initialLoadersState = Object.keys(loadersData).reduce((res, key) => {
154
135
  const loaderData = loadersData[key];
155
-
156
136
  if (loaderData.loading !== false) {
157
137
  return res;
158
138
  }
159
-
160
139
  res[key] = loaderData;
161
140
  return res;
162
141
  }, {});
@@ -169,29 +148,43 @@ root, ReactDOM = defaultReactDOM) => {
169
148
  } : {}));
170
149
  context.initialData = ssrData === null || ssrData === void 0 ? void 0 : (_ssrData$data2 = ssrData.data) === null || _ssrData$data2 === void 0 ? void 0 : _ssrData$data2.initialData;
171
150
  const initialData = await runInit(context);
172
-
173
151
  if (initialData) {
174
152
  context.initialData = initialData;
175
153
  }
176
-
177
- const rootElement = typeof id !== 'string' ? id : document.getElementById(id || 'root'); // https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html
178
-
154
+ const rootElement = typeof id !== 'string' ? id : document.getElementById(id || 'root');
155
+ if (!ReactDOM) {
156
+ throw Error('The `bootstrap` need provide `ReactDOM` parameter');
157
+ }
158
+ // https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html
179
159
  const ModernRender = App => {
180
160
  if (IS_REACT18) {
181
- (root || ReactDOM.createRoot(rootElement)).render(App);
161
+ if (root) {
162
+ root.render(App);
163
+ } else if (ReactDOM.createRoot) {
164
+ ReactDOM.createRoot(rootElement).render(App);
165
+ } else {
166
+ throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `createRoot` method');
167
+ }
182
168
  } else {
169
+ if (!ReactDOM.render) {
170
+ throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `render` method');
171
+ }
183
172
  ReactDOM.render(App, rootElement);
184
173
  }
185
174
  };
186
-
187
175
  const ModernHydrate = (App, callback) => {
188
176
  if (IS_REACT18) {
177
+ if (!ReactDOM.hydrateRoot) {
178
+ throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `hydrateRoot` method');
179
+ }
189
180
  ReactDOM.hydrateRoot(rootElement, App);
190
181
  } else {
182
+ if (!ReactDOM.hydrate) {
183
+ throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `hydrate` method');
184
+ }
191
185
  ReactDOM.hydrate(App, rootElement, callback);
192
186
  }
193
187
  };
194
-
195
188
  return runner.client({
196
189
  App,
197
190
  context,
@@ -219,12 +212,37 @@ root, ReactDOM = defaultReactDOM) => {
219
212
  skipStatic: process.env.NODE_ENV === 'production' && !id.staticGenerate
220
213
  })
221
214
  });
215
+
216
+ // Handle redirects from React Router with an HTTP redirect
217
+ const isRedirectResponse = result => {
218
+ if (typeof Response !== 'undefined' &&
219
+ // fix: ssg workflow doesn't inject Web Response
220
+ result instanceof Response && result.status >= 300 && result.status <= 399) {
221
+ const {
222
+ status
223
+ } = result;
224
+ const redirectUrl = result.headers.get('Location') || '/';
225
+ const {
226
+ ssrContext
227
+ } = context;
228
+ if (ssrContext) {
229
+ ssrContext.res.statusCode = status;
230
+ ssrContext.res.setHeader('Location', redirectUrl);
231
+ ssrContext.redirection.status = status;
232
+ ssrContext.redirection.url = redirectUrl;
233
+ }
234
+ return true;
235
+ }
236
+ return false;
237
+ };
222
238
  const initialData = await runInit(context);
223
- context.initialData = initialData;
224
- return runner.server({
225
- App,
226
- context
227
- });
239
+ if (!isRedirectResponse(initialData)) {
240
+ context.initialData = initialData;
241
+ return runner.server({
242
+ App,
243
+ context
244
+ });
245
+ }
228
246
  }
229
247
  };
230
248
  export const useRuntimeContext = () => {
@@ -1,6 +1,7 @@
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
6
  export { RuntimeReactContext, ServerRouterContext } from "../runtime-context";
6
7
  export * from "./loader";
@@ -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,