@modern-js/runtime 2.54.6 → 2.55.0

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 (301) hide show
  1. package/dist/cjs/{ssr/serverRender/renderToString/index.js → cli/alias.js} +29 -18
  2. package/dist/cjs/cli/code.js +124 -0
  3. package/dist/cjs/cli/constants.js +23 -2
  4. package/dist/cjs/cli/index.js +92 -17
  5. package/dist/cjs/{ssr/cli → cli/ssr}/index.js +7 -86
  6. package/dist/cjs/cli/template.js +101 -0
  7. package/dist/cjs/cli/template.server.js +71 -0
  8. package/dist/cjs/core/browser/hydrate.js +116 -0
  9. package/dist/cjs/core/browser/index.js +122 -0
  10. package/dist/cjs/core/compatible.js +39 -74
  11. package/dist/cjs/{ssr/serverRender/types.js → core/constants.js} +3 -3
  12. package/dist/cjs/core/context/index.js +39 -2
  13. package/dist/cjs/core/context/runtime.js +3 -3
  14. package/dist/cjs/core/loader/useLoader.js +2 -2
  15. package/dist/cjs/core/plugin/base.js +0 -4
  16. package/dist/cjs/core/plugin/index.js +6 -0
  17. package/dist/cjs/core/react/index.js +51 -0
  18. package/dist/cjs/{ssr/serverRender → core/server}/helmet.js +11 -2
  19. package/dist/cjs/core/server/index.js +38 -0
  20. package/dist/cjs/core/server/requestHandler.js +156 -0
  21. package/dist/cjs/core/server/server.js +34 -0
  22. package/dist/cjs/{ssr/serverRender/renderToStream/buildTemplate.share.js → core/server/shared.js} +7 -10
  23. package/dist/cjs/core/server/stream/afterTemplate.js +80 -0
  24. package/dist/cjs/{ssr/serverRender/renderToStream/bulidTemplate.before.js → core/server/stream/beforeTemplate.js} +11 -12
  25. package/dist/cjs/core/server/stream/createReadableStream.js +124 -0
  26. package/dist/cjs/core/server/stream/createReadableStream.worker.js +105 -0
  27. package/dist/cjs/core/server/stream/index.js +30 -0
  28. package/dist/cjs/core/server/stream/shared.js +112 -0
  29. package/dist/cjs/{ssr/serverRender/renderToStream → core/server/stream}/template.js +6 -10
  30. package/dist/cjs/core/server/string/index.js +152 -0
  31. package/dist/cjs/{ssr/serverRender/renderToString → core/server/string}/loadable.js +9 -12
  32. package/dist/cjs/core/server/string/prefetch.js +112 -0
  33. package/dist/cjs/core/server/string/ssrData.js +100 -0
  34. package/dist/cjs/{ssr/serverRender/renderToString → core/server/string}/styledComponent.js +20 -11
  35. package/dist/cjs/core/server/string/types.js +16 -0
  36. package/dist/cjs/core/server/tracer.js +60 -0
  37. package/dist/cjs/{ssr/serverRender → core/server}/utils.js +48 -2
  38. package/dist/cjs/router/cli/code/index.js +10 -6
  39. package/dist/cjs/router/cli/code/templates.js +58 -3
  40. package/dist/cjs/router/cli/constants.js +6 -0
  41. package/dist/cjs/router/cli/entry.js +2 -4
  42. package/dist/cjs/router/cli/handler.js +22 -5
  43. package/dist/cjs/router/cli/index.js +29 -56
  44. package/dist/cjs/router/runtime/index.js +2 -0
  45. package/dist/cjs/router/runtime/plugin.js +13 -40
  46. package/dist/cjs/router/runtime/plugin.node.js +17 -32
  47. package/dist/cjs/state/cli/index.js +7 -35
  48. package/dist/cjs/state/runtime/plugin.js +6 -15
  49. package/dist/esm/cli/alias.js +30 -0
  50. package/dist/esm/cli/code.js +131 -0
  51. package/dist/esm/cli/constants.js +15 -1
  52. package/dist/esm/cli/index.js +111 -18
  53. package/dist/esm/{ssr/cli → cli/ssr}/babel-plugin-ssr-loader-id.js +1 -1
  54. package/dist/esm/cli/ssr/index.js +110 -0
  55. package/dist/esm/{ssr/cli → cli/ssr}/loadable-bundler-plugin.js +1 -1
  56. package/dist/esm/cli/template.js +53 -0
  57. package/dist/esm/cli/template.server.js +26 -0
  58. package/dist/esm/core/browser/hydrate.js +88 -0
  59. package/dist/esm/core/browser/index.js +224 -0
  60. package/dist/esm/core/compatible.js +48 -90
  61. package/dist/esm/core/context/index.js +32 -1
  62. package/dist/esm/core/context/runtime.js +3 -2
  63. package/dist/esm/core/loader/useLoader.js +2 -2
  64. package/dist/esm/core/plugin/base.js +0 -4
  65. package/dist/esm/core/plugin/index.js +10 -0
  66. package/dist/esm/core/react/index.js +31 -0
  67. package/dist/esm/{ssr/serverRender → core/server}/helmet.js +10 -2
  68. package/dist/esm/core/server/index.js +16 -0
  69. package/dist/esm/core/server/react/prerender/type.js +0 -0
  70. package/dist/esm/core/server/requestHandler.js +181 -0
  71. package/dist/esm/core/server/server.js +8 -0
  72. package/dist/esm/core/server/shared.js +10 -0
  73. package/dist/esm/core/server/stream/afterTemplate.js +60 -0
  74. package/dist/esm/{ssr/serverRender/renderToStream/bulidTemplate.before.js → core/server/stream/beforeTemplate.js} +10 -11
  75. package/dist/esm/{ssr/serverRender/renderToStream/renderToPipe.js → core/server/stream/createReadableStream.js} +43 -38
  76. package/dist/esm/core/server/stream/createReadableStream.worker.js +142 -0
  77. package/dist/esm/core/server/stream/index.js +6 -0
  78. package/dist/esm/core/server/stream/shared.js +102 -0
  79. package/dist/esm/core/server/stream/template.js +42 -0
  80. package/dist/esm/core/server/string/index.js +219 -0
  81. package/dist/esm/{ssr/serverRender/renderToString → core/server/string}/loadable.js +10 -13
  82. package/dist/esm/{ssr → core/server/string}/prefetch.js +27 -21
  83. package/dist/esm/core/server/string/ssrData.js +83 -0
  84. package/dist/esm/core/server/string/styledComponent.js +34 -0
  85. package/dist/esm/core/server/string/types.js +0 -0
  86. package/dist/esm/core/server/tracer.js +34 -0
  87. package/dist/esm/core/server/utils.js +83 -0
  88. package/dist/esm/router/cli/code/index.js +11 -8
  89. package/dist/esm/router/cli/code/templates.js +100 -7
  90. package/dist/esm/router/cli/constants.js +4 -0
  91. package/dist/esm/router/cli/entry.js +2 -4
  92. package/dist/esm/router/cli/handler.js +70 -8
  93. package/dist/esm/router/cli/index.js +52 -65
  94. package/dist/esm/router/runtime/index.js +1 -0
  95. package/dist/esm/router/runtime/plugin.js +12 -20
  96. package/dist/esm/router/runtime/plugin.node.js +19 -34
  97. package/dist/esm/state/cli/index.js +9 -38
  98. package/dist/esm/state/runtime/plugin.js +5 -5
  99. package/dist/esm-node/cli/alias.js +28 -0
  100. package/dist/esm-node/cli/code.js +90 -0
  101. package/dist/esm-node/cli/constants.js +15 -1
  102. package/dist/esm-node/cli/index.js +84 -13
  103. package/dist/esm-node/{ssr/cli → cli/ssr}/babel-plugin-ssr-loader-id.js +1 -1
  104. package/dist/esm-node/cli/ssr/index.js +87 -0
  105. package/dist/esm-node/{ssr/cli → cli/ssr}/loadable-bundler-plugin.js +1 -1
  106. package/dist/esm-node/cli/template.js +64 -0
  107. package/dist/esm-node/cli/template.server.js +47 -0
  108. package/dist/esm-node/core/browser/hydrate.js +81 -0
  109. package/dist/esm-node/core/browser/index.js +88 -0
  110. package/dist/esm-node/core/compatible.js +39 -74
  111. package/dist/esm-node/core/context/index.js +32 -1
  112. package/dist/esm-node/core/context/runtime.js +3 -3
  113. package/dist/esm-node/core/loader/useLoader.js +2 -2
  114. package/dist/esm-node/core/plugin/base.js +0 -4
  115. package/dist/esm-node/core/plugin/index.js +5 -0
  116. package/dist/esm-node/core/react/index.js +27 -0
  117. package/dist/esm-node/{ssr/serverRender → core/server}/helmet.js +6 -2
  118. package/dist/esm-node/core/server/index.js +12 -0
  119. package/dist/esm-node/core/server/requestHandler.js +132 -0
  120. package/dist/esm-node/core/server/server.js +8 -0
  121. package/dist/esm-node/core/server/shared.js +6 -0
  122. package/dist/esm-node/core/server/stream/afterTemplate.js +56 -0
  123. package/dist/esm-node/{ssr/serverRender/renderToStream/bulidTemplate.before.js → core/server/stream/beforeTemplate.js} +8 -9
  124. package/dist/esm-node/{ssr/serverRender/renderToStream/renderToPipe.js → core/server/stream/createReadableStream.js} +41 -35
  125. package/dist/esm-node/core/server/stream/createReadableStream.worker.js +71 -0
  126. package/dist/esm-node/core/server/stream/index.js +6 -0
  127. package/dist/esm-node/core/server/stream/shared.js +75 -0
  128. package/dist/esm-node/core/server/stream/template.js +15 -0
  129. package/dist/esm-node/core/server/string/index.js +118 -0
  130. package/dist/esm-node/{ssr/serverRender/renderToString → core/server/string}/loadable.js +8 -11
  131. package/dist/esm-node/core/server/string/prefetch.js +78 -0
  132. package/dist/esm-node/core/server/string/ssrData.js +76 -0
  133. package/dist/esm-node/core/server/string/styledComponent.js +29 -0
  134. package/dist/esm-node/core/server/tracer.js +33 -0
  135. package/dist/esm-node/core/server/utils.js +60 -0
  136. package/dist/esm-node/router/cli/code/index.js +8 -5
  137. package/dist/esm-node/router/cli/code/templates.js +60 -6
  138. package/dist/esm-node/router/cli/constants.js +4 -0
  139. package/dist/esm-node/router/cli/entry.js +2 -4
  140. package/dist/esm-node/router/cli/handler.js +21 -5
  141. package/dist/esm-node/router/cli/index.js +31 -58
  142. package/dist/esm-node/router/runtime/index.js +1 -0
  143. package/dist/esm-node/router/runtime/plugin.js +13 -30
  144. package/dist/esm-node/router/runtime/plugin.node.js +18 -33
  145. package/dist/esm-node/state/cli/index.js +8 -36
  146. package/dist/esm-node/state/runtime/plugin.js +5 -5
  147. package/dist/types/cli/alias.d.ts +7 -0
  148. package/dist/types/cli/code.d.ts +10 -0
  149. package/dist/types/cli/constants.d.ts +7 -0
  150. package/dist/types/cli/index.d.ts +8 -1
  151. package/dist/types/cli/template.d.ts +27 -0
  152. package/dist/types/cli/template.server.d.ts +15 -0
  153. package/dist/types/common.d.ts +9 -0
  154. package/dist/types/core/browser/hydrate.d.ts +5 -0
  155. package/dist/types/core/browser/index.d.ts +2 -0
  156. package/dist/types/core/config.d.ts +5 -6
  157. package/dist/types/core/constants.d.ts +5 -0
  158. package/dist/types/core/context/index.d.ts +34 -1
  159. package/dist/types/core/context/runtime.d.ts +2 -2
  160. package/dist/types/core/plugin/base.d.ts +3 -33
  161. package/dist/types/core/plugin/index.d.ts +2 -11
  162. package/dist/types/core/plugin/runner.d.ts +1 -11
  163. package/dist/types/core/react/index.d.ts +6 -0
  164. package/dist/types/core/server/helmet.d.ts +3 -0
  165. package/dist/types/core/server/index.d.ts +4 -0
  166. package/dist/types/core/server/requestHandler.d.ts +11 -0
  167. package/dist/types/core/server/server.d.ts +4 -0
  168. package/dist/types/core/server/shared.d.ts +9 -0
  169. package/dist/types/core/server/stream/afterTemplate.d.ts +12 -0
  170. package/dist/types/core/server/stream/beforeTemplate.d.ts +8 -0
  171. package/dist/types/core/server/stream/createReadableStream.d.ts +2 -0
  172. package/dist/types/core/server/stream/createReadableStream.worker.d.ts +2 -0
  173. package/dist/types/core/server/stream/index.d.ts +1 -0
  174. package/dist/types/core/server/stream/shared.d.ts +22 -0
  175. package/dist/types/core/server/stream/template.d.ts +9 -0
  176. package/dist/types/core/server/string/index.d.ts +2 -0
  177. package/dist/types/core/server/string/loadable.d.ts +35 -0
  178. package/dist/types/core/server/string/prefetch.d.ts +15 -0
  179. package/dist/types/core/server/string/ssrData.d.ts +18 -0
  180. package/dist/types/core/server/string/styledComponent.d.ts +11 -0
  181. package/dist/types/core/server/string/types.d.ts +12 -0
  182. package/dist/types/core/server/tracer.d.ts +21 -0
  183. package/dist/types/core/server/utils.d.ts +19 -0
  184. package/dist/types/core/types.d.ts +35 -1
  185. package/dist/types/index.d.ts +1 -1
  186. package/dist/types/router/cli/code/index.d.ts +3 -4
  187. package/dist/types/router/cli/code/templates.d.ts +9 -1
  188. package/dist/types/router/cli/constants.d.ts +2 -0
  189. package/dist/types/router/cli/handler.d.ts +1 -0
  190. package/dist/types/router/runtime/index.d.ts +1 -0
  191. package/dist/types/router/runtime/plugin.d.ts +1 -1
  192. package/dist/types/router/runtime/plugin.node.d.ts +2 -2
  193. package/dist/types/router/runtime/types.d.ts +1 -2
  194. package/dist/types/state/runtime/plugin.d.ts +2 -2
  195. package/package.json +49 -42
  196. package/types/router.d.ts +7 -2
  197. package/dist/cjs/ssr/index.js +0 -183
  198. package/dist/cjs/ssr/index.node.js +0 -86
  199. package/dist/cjs/ssr/prefetch.js +0 -92
  200. package/dist/cjs/ssr/serverRender/index.js +0 -39
  201. package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +0 -74
  202. package/dist/cjs/ssr/serverRender/renderToStream/index.js +0 -74
  203. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +0 -104
  204. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.worker.js +0 -108
  205. package/dist/cjs/ssr/serverRender/renderToString/buildHtml.js +0 -52
  206. package/dist/cjs/ssr/serverRender/renderToString/entry.js +0 -179
  207. package/dist/cjs/ssr/serverRender/renderToString/render.js +0 -61
  208. package/dist/cjs/ssr/serverRender/tracker.js +0 -113
  209. package/dist/cjs/ssr/utils.js +0 -94
  210. package/dist/esm/ssr/cli/index.js +0 -194
  211. package/dist/esm/ssr/index.js +0 -169
  212. package/dist/esm/ssr/index.node.js +0 -78
  213. package/dist/esm/ssr/serverRender/index.js +0 -55
  214. package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +0 -48
  215. package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.share.js +0 -12
  216. package/dist/esm/ssr/serverRender/renderToStream/index.js +0 -49
  217. package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.worker.js +0 -164
  218. package/dist/esm/ssr/serverRender/renderToStream/template.js +0 -46
  219. package/dist/esm/ssr/serverRender/renderToString/buildHtml.js +0 -34
  220. package/dist/esm/ssr/serverRender/renderToString/entry.js +0 -257
  221. package/dist/esm/ssr/serverRender/renderToString/index.js +0 -34
  222. package/dist/esm/ssr/serverRender/renderToString/render.js +0 -55
  223. package/dist/esm/ssr/serverRender/renderToString/styledComponent.js +0 -25
  224. package/dist/esm/ssr/serverRender/tracker.js +0 -82
  225. package/dist/esm/ssr/serverRender/utils.js +0 -21
  226. package/dist/esm/ssr/utils.js +0 -59
  227. package/dist/esm-node/ssr/cli/index.js +0 -166
  228. package/dist/esm-node/ssr/index.js +0 -147
  229. package/dist/esm-node/ssr/index.node.js +0 -50
  230. package/dist/esm-node/ssr/prefetch.js +0 -72
  231. package/dist/esm-node/ssr/serverRender/index.js +0 -19
  232. package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +0 -50
  233. package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.share.js +0 -8
  234. package/dist/esm-node/ssr/serverRender/renderToStream/index.js +0 -40
  235. package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.worker.js +0 -88
  236. package/dist/esm-node/ssr/serverRender/renderToStream/template.js +0 -19
  237. package/dist/esm-node/ssr/serverRender/renderToString/buildHtml.js +0 -24
  238. package/dist/esm-node/ssr/serverRender/renderToString/entry.js +0 -149
  239. package/dist/esm-node/ssr/serverRender/renderToString/index.js +0 -17
  240. package/dist/esm-node/ssr/serverRender/renderToString/render.js +0 -27
  241. package/dist/esm-node/ssr/serverRender/renderToString/styledComponent.js +0 -20
  242. package/dist/esm-node/ssr/serverRender/tracker.js +0 -87
  243. package/dist/esm-node/ssr/serverRender/utils.js +0 -17
  244. package/dist/esm-node/ssr/utils.js +0 -57
  245. package/dist/types/ssr/index.d.ts +0 -11
  246. package/dist/types/ssr/index.node.d.ts +0 -5
  247. package/dist/types/ssr/prefetch.d.ts +0 -16
  248. package/dist/types/ssr/serverRender/helmet.d.ts +0 -2
  249. package/dist/types/ssr/serverRender/index.d.ts +0 -2
  250. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +0 -7
  251. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.share.d.ts +0 -3
  252. package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +0 -2
  253. package/dist/types/ssr/serverRender/renderToStream/index.d.ts +0 -3
  254. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +0 -7
  255. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.worker.d.ts +0 -12
  256. package/dist/types/ssr/serverRender/renderToStream/template.d.ts +0 -6
  257. package/dist/types/ssr/serverRender/renderToString/buildHtml.d.ts +0 -6
  258. package/dist/types/ssr/serverRender/renderToString/entry.d.ts +0 -24
  259. package/dist/types/ssr/serverRender/renderToString/index.d.ts +0 -2
  260. package/dist/types/ssr/serverRender/renderToString/loadable.d.ts +0 -26
  261. package/dist/types/ssr/serverRender/renderToString/render.d.ts +0 -16
  262. package/dist/types/ssr/serverRender/renderToString/styledComponent.d.ts +0 -15
  263. package/dist/types/ssr/serverRender/tracker.d.ts +0 -20
  264. package/dist/types/ssr/serverRender/types.d.ts +0 -49
  265. package/dist/types/ssr/serverRender/utils.d.ts +0 -9
  266. package/dist/types/ssr/utils.d.ts +0 -10
  267. /package/dist/cjs/{ssr/cli → cli/ssr}/babel-plugin-ssr-loader-id.js +0 -0
  268. /package/dist/cjs/{ssr/cli → cli/ssr}/loadable-bundler-plugin.js +0 -0
  269. /package/dist/cjs/{ssr/react/withCallback/index.js → core/browser/withCallback.js} +0 -0
  270. /package/dist/cjs/{ssr/serverRender → core/server}/constants.js +0 -0
  271. /package/dist/cjs/{ssr → core/server}/react/index.js +0 -0
  272. /package/dist/cjs/{ssr → core/server}/react/nossr/index.js +0 -0
  273. /package/dist/cjs/{ssr → core/server}/react/prerender/index.js +0 -0
  274. /package/dist/cjs/{ssr → core/server}/react/prerender/type.js +0 -0
  275. /package/dist/cjs/{ssr → core/server}/react/prerender/util.js +0 -0
  276. /package/dist/esm/{ssr/react/withCallback/index.js → core/browser/withCallback.js} +0 -0
  277. /package/dist/esm/{ssr/serverRender/types.js → core/constants.js} +0 -0
  278. /package/dist/esm/{ssr/serverRender → core/server}/constants.js +0 -0
  279. /package/dist/esm/{ssr → core/server}/react/index.js +0 -0
  280. /package/dist/esm/{ssr → core/server}/react/nossr/index.js +0 -0
  281. /package/dist/esm/{ssr → core/server}/react/prerender/index.js +0 -0
  282. /package/dist/esm/{ssr → core/server}/react/prerender/util.js +0 -0
  283. /package/dist/esm-node/{ssr/react/withCallback/index.js → core/browser/withCallback.js} +0 -0
  284. /package/dist/esm-node/{ssr/serverRender/types.js → core/constants.js} +0 -0
  285. /package/dist/esm-node/{ssr/serverRender → core/server}/constants.js +0 -0
  286. /package/dist/esm-node/{ssr → core/server}/react/index.js +0 -0
  287. /package/dist/esm-node/{ssr → core/server}/react/nossr/index.js +0 -0
  288. /package/dist/esm-node/{ssr → core/server}/react/prerender/index.js +0 -0
  289. /package/dist/esm-node/{ssr → core/server}/react/prerender/type.js +0 -0
  290. /package/dist/esm-node/{ssr → core/server}/react/prerender/util.js +0 -0
  291. /package/dist/{esm/ssr/react/prerender/type.js → esm-node/core/server/string/types.js} +0 -0
  292. /package/dist/types/{ssr/cli → cli/ssr}/babel-plugin-ssr-loader-id.d.ts +0 -0
  293. /package/dist/types/{ssr/cli → cli/ssr}/index.d.ts +0 -0
  294. /package/dist/types/{ssr/cli → cli/ssr}/loadable-bundler-plugin.d.ts +0 -0
  295. /package/dist/types/{ssr/react/withCallback/index.d.ts → core/browser/withCallback.d.ts} +0 -0
  296. /package/dist/types/{ssr/serverRender → core/server}/constants.d.ts +0 -0
  297. /package/dist/types/{ssr → core/server}/react/index.d.ts +0 -0
  298. /package/dist/types/{ssr → core/server}/react/nossr/index.d.ts +0 -0
  299. /package/dist/types/{ssr → core/server}/react/prerender/index.d.ts +0 -0
  300. /package/dist/types/{ssr → core/server}/react/prerender/type.d.ts +0 -0
  301. /package/dist/types/{ssr → core/server}/react/prerender/util.d.ts +0 -0
@@ -0,0 +1,87 @@
1
+ import path from "path";
2
+ import { LOADABLE_STATS_FILE, isUseSSRBundle } from "@modern-js/utils";
3
+ const hasStringSSREntry = (userConfig) => {
4
+ const isStreaming = (ssr) => ssr && typeof ssr === "object" && ssr.mode === "stream";
5
+ const { server, output } = userConfig;
6
+ if (((server === null || server === void 0 ? void 0 : server.ssr) || output.ssg) && !isStreaming(server.ssr)) {
7
+ return true;
8
+ }
9
+ if ((server === null || server === void 0 ? void 0 : server.ssrByEntries) && typeof server.ssrByEntries === "object") {
10
+ for (const name of Object.keys(server.ssrByEntries)) {
11
+ if (server.ssrByEntries[name] && !isStreaming(server.ssrByEntries[name])) {
12
+ return true;
13
+ }
14
+ }
15
+ }
16
+ return false;
17
+ };
18
+ const checkUseStringSSR = (config) => {
19
+ const { output } = config;
20
+ return Boolean(output === null || output === void 0 ? void 0 : output.ssg) || hasStringSSREntry(config);
21
+ };
22
+ const ssrPlugin = () => ({
23
+ name: "@modern-js/plugin-ssr",
24
+ required: [
25
+ "@modern-js/runtime"
26
+ ],
27
+ setup: (api) => {
28
+ return {
29
+ // for bundle
30
+ config() {
31
+ const { bundlerType = "webpack" } = api.useAppContext();
32
+ const babelHandler = (() => {
33
+ if (bundlerType === "webpack") {
34
+ return (config) => {
35
+ var _config_plugins;
36
+ const userConfig = api.useResolvedConfigContext();
37
+ (_config_plugins = config.plugins) === null || _config_plugins === void 0 ? void 0 : _config_plugins.push(path.join(__dirname, "./babel-plugin-ssr-loader-id"));
38
+ if (isUseSSRBundle(userConfig) && checkUseStringSSR(userConfig)) {
39
+ var _config_plugins1;
40
+ (_config_plugins1 = config.plugins) === null || _config_plugins1 === void 0 ? void 0 : _config_plugins1.push(require.resolve("@loadable/babel-plugin"));
41
+ }
42
+ };
43
+ } else if (bundlerType === "rspack") {
44
+ return (config) => {
45
+ const userConfig = api.useResolvedConfigContext();
46
+ if (isUseSSRBundle(userConfig) && checkUseStringSSR(userConfig)) {
47
+ var _config_plugins, _config_plugins1;
48
+ (_config_plugins = config.plugins) === null || _config_plugins === void 0 ? void 0 : _config_plugins.push(path.join(__dirname, "./babel-plugin-ssr-loader-id"));
49
+ (_config_plugins1 = config.plugins) === null || _config_plugins1 === void 0 ? void 0 : _config_plugins1.push(require.resolve("@loadable/babel-plugin"));
50
+ }
51
+ };
52
+ }
53
+ })();
54
+ return {
55
+ source: {
56
+ alias: {
57
+ // ensure that all packages use the same storage in @modern-js/runtime-utils/node
58
+ "@modern-js/runtime-utils/node$": require.resolve("@modern-js/runtime-utils/node")
59
+ },
60
+ globalVars: (values, { target }) => {
61
+ values["process.env.MODERN_TARGET"] = target === "node" || target === "service-worker" ? "node" : "browser";
62
+ }
63
+ },
64
+ tools: {
65
+ bundlerChain(chain, { isServer, isServiceWorker }) {
66
+ const userConfig = api.useResolvedConfigContext();
67
+ if (isUseSSRBundle(userConfig) && !isServer && !isServiceWorker && checkUseStringSSR(userConfig)) {
68
+ const LoadableBundlerPlugin = require("./loadable-bundler-plugin.js");
69
+ chain.plugin("loadable").use(LoadableBundlerPlugin, [
70
+ {
71
+ filename: LOADABLE_STATS_FILE
72
+ }
73
+ ]);
74
+ }
75
+ },
76
+ babel: babelHandler
77
+ }
78
+ };
79
+ }
80
+ };
81
+ }
82
+ });
83
+ var ssr_default = ssrPlugin;
84
+ export {
85
+ ssr_default as default,
86
+ ssrPlugin
87
+ };
@@ -5,7 +5,7 @@ var __commonJS = (cb, mod) => function __require() {
5
5
  import path from "path";
6
6
  import { fs } from "@modern-js/utils";
7
7
  var require_loadable_bundler_plugin = __commonJS({
8
- "src/ssr/cli/loadable-bundler-plugin.ts"(exports, module) {
8
+ "src/cli/ssr/loadable-bundler-plugin.ts"(exports, module) {
9
9
  class LoadablePlugin {
10
10
  apply(compiler) {
11
11
  this.compiler = compiler;
@@ -0,0 +1,64 @@
1
+ import path from "path";
2
+ import { JS_EXTENSIONS, findExists, formatImportPath } from "@modern-js/utils";
3
+ import { ENTRY_POINT_RUNTIME_GLOBAL_CONTEXT_FILE_NAME, ENTRY_POINT_RUNTIME_REGISTER_FILE_NAME } from "./constants";
4
+ const genRenderCode = ({ srcDirectory, internalSrcAlias, metaName, entry, customEntry, customBootstrap, mountId }) => {
5
+ if (customEntry) {
6
+ return `import '${formatImportPath(entry.replace(srcDirectory, internalSrcAlias))}'`;
7
+ }
8
+ return `import { createRoot } from '@${metaName}/runtime/react';
9
+ import { render } from '@${metaName}/runtime/browser';
10
+ ${customBootstrap ? `import customBootstrap from '${formatImportPath(customBootstrap.replace(srcDirectory, internalSrcAlias))}';` : ""}
11
+
12
+ const ModernRoot = createRoot();
13
+
14
+ ${customBootstrap ? `customBootstrap(ModernRoot, () => render(<ModernRoot />, '${mountId || "root"}'));` : `render(<ModernRoot />, '${mountId || "root"}');`}`;
15
+ };
16
+ const index = ({ srcDirectory, internalSrcAlias, metaName, entry, entryName, customEntry, customBootstrap, mountId }) => `import '@${metaName}/runtime/registry/${entryName}';
17
+ ${genRenderCode({
18
+ srcDirectory,
19
+ internalSrcAlias,
20
+ metaName,
21
+ entry,
22
+ customEntry,
23
+ customBootstrap,
24
+ mountId
25
+ })}
26
+ `;
27
+ const register = () => `import './${ENTRY_POINT_RUNTIME_GLOBAL_CONTEXT_FILE_NAME}';
28
+ import './${ENTRY_POINT_RUNTIME_REGISTER_FILE_NAME}';
29
+ `;
30
+ const getImportRuntimeConfigCode = (srcDirectory, internalSrcAlias, runtimeConfigFile) => {
31
+ if (runtimeConfigFile && findExists(JS_EXTENSIONS.map((ext) => path.resolve(srcDirectory, `${runtimeConfigFile}${ext}`)))) {
32
+ return `import runtimeConfig from '${internalSrcAlias}/${runtimeConfigFile}';`;
33
+ }
34
+ return `let runtimeConfig;`;
35
+ };
36
+ const getRegisterRuntimePluginCode = (entryName, name, config) => `plugins.push(${name}Plugin(mergeConfig(${JSON.stringify(config)}, (runtimeConfig || {})['${name}'], ((runtimeConfig || {})['${name}ByEntries'] || {})['${entryName}'], (getGlobalAppConfig() || {})['${name}'])));`;
37
+ const runtimeRegister = ({ entryName, srcDirectory, internalSrcAlias, metaName, runtimeConfigFile, runtimePlugins }) => `import { registerPlugin, mergeConfig } from '@${metaName}/runtime/plugin';
38
+ import { getGlobalAppConfig, getGlobalLayoutApp } from '@${metaName}/runtime/context';
39
+ ${getImportRuntimeConfigCode(srcDirectory, internalSrcAlias, runtimeConfigFile)}
40
+
41
+ const plugins = [];
42
+
43
+ ${runtimePlugins.map(({ name, path: path2, config }) => `import { ${name}Plugin } from '${path2}';
44
+
45
+ ${getRegisterRuntimePluginCode(entryName, name, config)}
46
+ `).join("\n")}
47
+ registerPlugin(plugins, runtimeConfig);
48
+ `;
49
+ const runtimeGlobalContext = ({ srcDirectory, internalSrcAlias, metaName, entry, customEntry }) => {
50
+ return `import { setGlobalContext } from '@${metaName}/runtime/context'
51
+
52
+ import App from '${// We need to get the path of App.tsx here, but the entry is `src/entry.tsx`
53
+ formatImportPath(customEntry ? entry.replace("entry.tsx", "App.tsx").replace(srcDirectory, internalSrcAlias) : entry.replace(srcDirectory, internalSrcAlias))}';
54
+
55
+ setGlobalContext({
56
+ App,
57
+ });`;
58
+ };
59
+ export {
60
+ index,
61
+ register,
62
+ runtimeGlobalContext,
63
+ runtimeRegister
64
+ };
@@ -0,0 +1,47 @@
1
+ import { formatImportPath } from "@modern-js/utils";
2
+ const SERVER_ENTRY = `
3
+ import {
4
+ #render,
5
+ createRequestHandler,
6
+ } from '@#metaName/runtime/ssr/server';
7
+
8
+ const handleRequest = async (request, ServerRoot, options) => {
9
+
10
+ const body = await #render(request, <ServerRoot />, options);
11
+
12
+ return new Response(body, {
13
+ headers: {
14
+ 'content-type': 'text/html; charset=utf-8',
15
+ #headers
16
+ },
17
+ })
18
+ };
19
+
20
+ export const requestHandler = createRequestHandler(handleRequest);
21
+ `;
22
+ const serverIndex = (options) => {
23
+ const { metaName = "modern-js", entryName } = options;
24
+ return `
25
+ import '@${metaName}/runtime/registry/${entryName}';
26
+ ${genHandlerCode(options)}
27
+ `;
28
+ };
29
+ function genHandlerCode({ mode, metaName, customServerEntry, srcDirectory, internalSrcAlias }) {
30
+ if (customServerEntry) {
31
+ return `export { default as requestHandler } from '${formatImportPath(customServerEntry.replace(srcDirectory, internalSrcAlias))}'`;
32
+ } else {
33
+ const serverEntry = transformServerEntry(SERVER_ENTRY, {
34
+ metaName: metaName || "modern-js",
35
+ mode
36
+ });
37
+ return serverEntry;
38
+ }
39
+ }
40
+ function transformServerEntry(source, options) {
41
+ const { metaName = "modern-js", mode } = options;
42
+ const output = source.replace(/#metaName/g, metaName).replace(/#render/g, mode === "string" ? "renderString" : "renderStreaming").replace(/#headers/g, mode === "string" ? "" : `'transfer-encoding': 'chunked',`);
43
+ return output;
44
+ }
45
+ export {
46
+ serverIndex
47
+ };
@@ -0,0 +1,81 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { normalizePathname } from "@modern-js/runtime-utils/url";
3
+ import { loadableReady } from "@loadable/component";
4
+ import React from "react";
5
+ import { RenderLevel } from "../constants";
6
+ import { WithCallback } from "./withCallback";
7
+ const isReact18 = () => process.env.IS_REACT18 === "true";
8
+ function hydrateRoot(App, context, ModernRender, ModernHydrate) {
9
+ var _window__SSR_DATA, _window, _window__SSR_DATA1, _window1;
10
+ const hydrateContext = {
11
+ ...context,
12
+ get routes() {
13
+ return context.routes;
14
+ },
15
+ _hydration: true
16
+ };
17
+ const { ssrContext } = hydrateContext;
18
+ const currentPathname = normalizePathname(window.location.pathname);
19
+ const initialPathname = normalizePathname(ssrContext.request.pathname);
20
+ if (initialPathname !== currentPathname && context.router) {
21
+ const errorMsg = `The initial URL ${initialPathname} and the URL ${currentPathname} to be hydrated do not match, reload.`;
22
+ console.error(errorMsg);
23
+ window.location.reload();
24
+ }
25
+ const callback = () => {
26
+ delete hydrateContext._hydration;
27
+ };
28
+ const renderLevel = ((_window = window) === null || _window === void 0 ? void 0 : (_window__SSR_DATA = _window._SSR_DATA) === null || _window__SSR_DATA === void 0 ? void 0 : _window__SSR_DATA.renderLevel) || RenderLevel.CLIENT_RENDER;
29
+ const renderMode = ((_window1 = window) === null || _window1 === void 0 ? void 0 : (_window__SSR_DATA1 = _window1._SSR_DATA) === null || _window__SSR_DATA1 === void 0 ? void 0 : _window__SSR_DATA1.mode) || "string";
30
+ if (isReact18() && renderMode === "stream") {
31
+ return streamSSRHydrate();
32
+ }
33
+ function streamSSRHydrate() {
34
+ if (renderLevel === RenderLevel.SERVER_RENDER) {
35
+ const SSRApp = () => /* @__PURE__ */ _jsx(WithCallback, {
36
+ callback,
37
+ children: /* @__PURE__ */ React.cloneElement(App, {
38
+ _internal_context: hydrateContext
39
+ })
40
+ });
41
+ return ModernHydrate(/* @__PURE__ */ _jsx(SSRApp, {}));
42
+ } else {
43
+ return ModernRender(App);
44
+ }
45
+ }
46
+ return stringSSRHydrate();
47
+ function stringSSRHydrate() {
48
+ if (renderLevel === RenderLevel.CLIENT_RENDER || renderLevel === RenderLevel.SERVER_PREFETCH) {
49
+ return ModernRender(App);
50
+ } else if (renderLevel === RenderLevel.SERVER_RENDER) {
51
+ return new Promise((resolve) => {
52
+ if (isReact18()) {
53
+ loadableReady(() => {
54
+ const SSRApp = () => /* @__PURE__ */ _jsx(WithCallback, {
55
+ callback,
56
+ children: /* @__PURE__ */ React.cloneElement(App, {
57
+ _internal_context: hydrateContext
58
+ })
59
+ });
60
+ ModernHydrate(/* @__PURE__ */ _jsx(SSRApp, {})).then((root) => {
61
+ resolve(root);
62
+ });
63
+ });
64
+ } else {
65
+ loadableReady(() => {
66
+ ModernHydrate(App, callback).then((root) => {
67
+ resolve(root);
68
+ });
69
+ });
70
+ }
71
+ });
72
+ } else {
73
+ console.warn(`unknow render level: ${renderLevel}, execute render()`);
74
+ return ModernRender(App);
75
+ }
76
+ }
77
+ }
78
+ export {
79
+ hydrateRoot,
80
+ isReact18
81
+ };
@@ -0,0 +1,88 @@
1
+ import React from "react";
2
+ import { getGlobalAppInit } from "../context";
3
+ import { getInitialContext } from "../context/runtime";
4
+ import { createLoaderManager } from "../loader/loaderManager";
5
+ import { getGlobalRunner } from "../plugin/runner";
6
+ import { hydrateRoot } from "./hydrate";
7
+ const IS_REACT18 = process.env.IS_REACT18 === "true";
8
+ function isClientArgs(id) {
9
+ return typeof id === "undefined" || typeof id === "string" || typeof HTMLElement !== "undefined" && id instanceof HTMLElement;
10
+ }
11
+ async function render(App, id) {
12
+ const runner = getGlobalRunner();
13
+ const context = getInitialContext(runner);
14
+ const runInit = (_context) => runner.init({
15
+ context: _context
16
+ }, {
17
+ onLast: ({ context: context1 }) => {
18
+ const init = getGlobalAppInit();
19
+ return init === null || init === void 0 ? void 0 : init(context1);
20
+ }
21
+ });
22
+ if (isClientArgs(id)) {
23
+ var _ssrData_data, _ssrData_data1;
24
+ const ssrData = window._SSR_DATA;
25
+ const loadersData = (ssrData === null || ssrData === void 0 ? void 0 : (_ssrData_data = ssrData.data) === null || _ssrData_data === void 0 ? void 0 : _ssrData_data.loadersData) || {};
26
+ const initialLoadersState = Object.keys(loadersData).reduce((res, key) => {
27
+ const loaderData = loadersData[key];
28
+ if ((loaderData === null || loaderData === void 0 ? void 0 : loaderData.loading) !== false) {
29
+ return res;
30
+ }
31
+ res[key] = loaderData;
32
+ return res;
33
+ }, {});
34
+ Object.assign(context, {
35
+ loaderManager: createLoaderManager(initialLoadersState, {
36
+ skipStatic: true
37
+ }),
38
+ ...ssrData ? {
39
+ ssrContext: ssrData === null || ssrData === void 0 ? void 0 : ssrData.context
40
+ } : {}
41
+ });
42
+ context.initialData = ssrData === null || ssrData === void 0 ? void 0 : (_ssrData_data1 = ssrData.data) === null || _ssrData_data1 === void 0 ? void 0 : _ssrData_data1.initialData;
43
+ const initialData = await runInit(context);
44
+ if (initialData) {
45
+ context.initialData = initialData;
46
+ }
47
+ const rootElement = id && typeof id !== "string" ? id : document.getElementById(id || "root");
48
+ async function ModernRender(App2) {
49
+ const renderFunc = IS_REACT18 ? renderWithReact18 : renderWithReact17;
50
+ return renderFunc(/* @__PURE__ */ React.cloneElement(App2, {
51
+ _internal_context: context
52
+ }), rootElement);
53
+ }
54
+ async function ModernHydrate(App2, callback) {
55
+ const hydrateFunc = IS_REACT18 ? hydrateWithReact18 : hydrateWithReact17;
56
+ return hydrateFunc(App2, rootElement, callback);
57
+ }
58
+ if (ssrData) {
59
+ return hydrateRoot(App, context, ModernRender, ModernHydrate);
60
+ }
61
+ return ModernRender(App);
62
+ }
63
+ throw Error("`render` function needs id in browser environment, it needs to be string or element");
64
+ }
65
+ async function renderWithReact18(App, rootElement) {
66
+ const ReactDOM = await import("react-dom/client");
67
+ const root = ReactDOM.createRoot(rootElement);
68
+ root.render(App);
69
+ return root;
70
+ }
71
+ async function renderWithReact17(App, rootElement) {
72
+ const ReactDOM = await import("react-dom");
73
+ ReactDOM.render(App, rootElement);
74
+ return rootElement;
75
+ }
76
+ async function hydrateWithReact18(App, rootElement) {
77
+ const ReactDOM = await import("react-dom/client");
78
+ const root = ReactDOM.hydrateRoot(rootElement, App);
79
+ return root;
80
+ }
81
+ async function hydrateWithReact17(App, rootElement, callback) {
82
+ const ReactDOM = await import("react-dom");
83
+ const root = ReactDOM.hydrate(App, rootElement, callback);
84
+ return root;
85
+ }
86
+ export {
87
+ render
88
+ };
@@ -1,11 +1,12 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import React, { useContext, useMemo } from "react";
3
- import hoistNonReactStatics from "hoist-non-react-statics";
4
3
  import { ROUTE_MANIFEST } from "@modern-js/utils/universal/constants";
5
4
  import { RuntimeReactContext } from "./context/runtime";
6
5
  import { registerPlugin } from "./plugin";
7
6
  import { createLoaderManager } from "./loader/loaderManager";
8
7
  import { getGlobalRunner } from "./plugin/runner";
8
+ import { getGlobalAppInit } from "./context";
9
+ import { hydrateRoot as ModernHydrateRoot } from "./browser/hydrate";
9
10
  const IS_REACT18 = process.env.IS_REACT18 === "true";
10
11
  function isClientArgs(id) {
11
12
  return typeof id === "string" || typeof HTMLElement !== "undefined" && id instanceof HTMLElement;
@@ -29,24 +30,21 @@ const createApp = ({ plugins, runtime, props: globalProps }) => {
29
30
  ...props
30
31
  }) : child));
31
32
  };
32
- if (App) {
33
- hoistNonReactStatics(WrapperComponent, App);
34
- }
35
33
  const HOCApp = runner.hoc({
36
34
  App: WrapperComponent,
37
35
  config: globalProps || {}
38
36
  }, {
39
37
  onLast: ({ App: App2 }) => {
40
- const WrapComponent = ({ context, ...props }) => {
41
- let contextValue = context;
38
+ const WrapComponent = ({ _internal_context, ...props }) => {
39
+ let contextValue = _internal_context;
42
40
  if (!(contextValue === null || contextValue === void 0 ? void 0 : contextValue.runner)) {
43
41
  contextValue = getInitialContext(runner);
44
42
  runner.init({
45
43
  context: contextValue
46
44
  }, {
47
45
  onLast: ({ context: context1 }) => {
48
- var _App_init;
49
- return App2 === null || App2 === void 0 ? void 0 : (_App_init = App2.init) === null || _App_init === void 0 ? void 0 : _App_init.call(App2, context1);
46
+ var _getGlobalAppInit;
47
+ return (_getGlobalAppInit = getGlobalAppInit()) === null || _getGlobalAppInit === void 0 ? void 0 : _getGlobalAppInit(context1);
50
48
  }
51
49
  });
52
50
  }
@@ -61,7 +59,7 @@ const createApp = ({ plugins, runtime, props: globalProps }) => {
61
59
  })
62
60
  });
63
61
  };
64
- return hoistNonReactStatics(WrapComponent, App2);
62
+ return WrapComponent;
65
63
  }
66
64
  });
67
65
  return HOCApp;
@@ -75,13 +73,13 @@ const bootstrap = async (BootApp, id, root, ReactDOM) => {
75
73
  context: _context
76
74
  }, {
77
75
  onLast: ({ context: context1 }) => {
78
- var _App_init;
79
- return App === null || App === void 0 ? void 0 : (_App_init = App.init) === null || _App_init === void 0 ? void 0 : _App_init.call(App, context1);
76
+ const init = getGlobalAppInit();
77
+ return init === null || init === void 0 ? void 0 : init(context1);
80
78
  }
81
79
  });
82
80
  if (!id) {
83
81
  return /* @__PURE__ */ React.createElement(App, {
84
- context
82
+ _internal_context: context
85
83
  });
86
84
  }
87
85
  const isBrowser = typeof window !== "undefined" && window.name !== "nodejs";
@@ -92,7 +90,7 @@ const bootstrap = async (BootApp, id, root, ReactDOM) => {
92
90
  const loadersData = (ssrData === null || ssrData === void 0 ? void 0 : (_ssrData_data = ssrData.data) === null || _ssrData_data === void 0 ? void 0 : _ssrData_data.loadersData) || {};
93
91
  const initialLoadersState = Object.keys(loadersData).reduce((res, key) => {
94
92
  const loaderData = loadersData[key];
95
- if (loaderData.loading !== false) {
93
+ if ((loaderData === null || loaderData === void 0 ? void 0 : loaderData.loading) !== false) {
96
94
  return res;
97
95
  }
98
96
  res[key] = loaderData;
@@ -119,8 +117,12 @@ const bootstrap = async (BootApp, id, root, ReactDOM) => {
119
117
  if (IS_REACT18) {
120
118
  if (root) {
121
119
  root.render(App2);
122
- } else if (ReactDOM.createRoot) {
123
- ReactDOM.createRoot(rootElement).render(App2);
120
+ return root;
121
+ }
122
+ if (ReactDOM.createRoot) {
123
+ const root2 = ReactDOM.createRoot(rootElement);
124
+ root2.render(App2);
125
+ return root2;
124
126
  } else {
125
127
  throw Error("The `bootstrap` `ReactDOM` parameter needs to provide the `createRoot` method");
126
128
  }
@@ -129,6 +131,7 @@ const bootstrap = async (BootApp, id, root, ReactDOM) => {
129
131
  throw Error("The `bootstrap` `ReactDOM` parameter needs to provide the `render` method");
130
132
  }
131
133
  ReactDOM.render(App2, rootElement);
134
+ return rootElement;
132
135
  }
133
136
  };
134
137
  const ModernHydrate = (App2, callback) => {
@@ -137,78 +140,40 @@ const bootstrap = async (BootApp, id, root, ReactDOM) => {
137
140
  throw Error("The `bootstrap` `ReactDOM` parameter needs to provide the `hydrateRoot` method");
138
141
  }
139
142
  ReactDOM.hydrateRoot(rootElement, App2);
140
- } else {
141
- if (!ReactDOM.hydrate) {
142
- throw Error("The `bootstrap` `ReactDOM` parameter needs to provide the `hydrate` method");
143
- }
144
- ReactDOM.hydrate(App2, rootElement, callback);
143
+ return rootElement;
145
144
  }
146
- };
147
- return runner.client({
148
- App,
149
- context,
150
- ModernRender,
151
- ModernHydrate
152
- }, {
153
- onLast: ({ App: App2 }) => {
154
- ModernRender(/* @__PURE__ */ React.createElement(App2, {
155
- context
156
- }));
145
+ if (!ReactDOM.hydrate) {
146
+ throw Error("The `bootstrap` `ReactDOM` parameter needs to provide the `hydrate` method");
157
147
  }
158
- });
148
+ ReactDOM.hydrate(App2, rootElement, callback);
149
+ return rootElement;
150
+ };
151
+ if (ssrData) {
152
+ return ModernHydrateRoot(/* @__PURE__ */ _jsx(App, {}), context, ModernRender, ModernHydrate);
153
+ }
154
+ return ModernRender(/* @__PURE__ */ React.createElement(App, {
155
+ _internal_context: context
156
+ }));
159
157
  } else {
160
158
  throw Error("`bootstrap` needs id in browser environment, it needs to be string or element");
161
159
  }
162
160
  } else {
163
- Object.assign(context, {
164
- ssrContext: id,
165
- isBrowser: false,
166
- loaderManager: createLoaderManager({}, {
167
- skipNonStatic: id.staticGenerate,
168
- // if not static generate, only non-static loader can exec on prod env
169
- skipStatic: process.env.NODE_ENV === "production" && !id.staticGenerate
170
- })
171
- });
172
- const isRedirectResponse = (result) => {
173
- if (typeof Response !== "undefined" && // fix: ssg workflow doesn't inject Web Response
174
- result instanceof Response && result.status >= 300 && result.status <= 399) {
175
- const { status } = result;
176
- const redirectUrl = result.headers.get("Location") || "/";
177
- const { ssrContext } = context;
178
- if (ssrContext) {
179
- var _ssrContext_res;
180
- ssrContext.res && (ssrContext.res.statusCode = status);
181
- (_ssrContext_res = ssrContext.res) === null || _ssrContext_res === void 0 ? void 0 : _ssrContext_res.setHeader("Location", redirectUrl);
182
- ssrContext.redirection = ssrContext.redirection || {};
183
- ssrContext.redirection.status = status;
184
- ssrContext.redirection.url = redirectUrl;
185
- }
186
- return true;
187
- }
188
- return false;
189
- };
190
- const initialData = await runInit(context);
191
- if (!isRedirectResponse(initialData)) {
192
- var _context_routerContext, _context_routerContext1;
193
- context.initialData = initialData;
194
- if (((_context_routerContext = context.routerContext) === null || _context_routerContext === void 0 ? void 0 : _context_routerContext.statusCode) && ((_context_routerContext1 = context.routerContext) === null || _context_routerContext1 === void 0 ? void 0 : _context_routerContext1.statusCode) !== 200) {
195
- var _context_routerContext2, _context_ssrContext;
196
- (_context_ssrContext = context.ssrContext) === null || _context_ssrContext === void 0 ? void 0 : _context_ssrContext.response.status((_context_routerContext2 = context.routerContext) === null || _context_routerContext2 === void 0 ? void 0 : _context_routerContext2.statusCode);
197
- }
198
- return runner.server({
199
- App,
200
- context
201
- });
202
- }
161
+ throw Error("Bootstrap function not support ssr render");
203
162
  }
204
163
  };
205
164
  const useRuntimeContext = () => {
165
+ var _context_ssrContext, _context_ssrContext1;
206
166
  const context = useContext(RuntimeReactContext);
167
+ const pickedContext = {
168
+ initialData: context.initialData,
169
+ request: (_context_ssrContext = context.ssrContext) === null || _context_ssrContext === void 0 ? void 0 : _context_ssrContext.request,
170
+ response: (_context_ssrContext1 = context.ssrContext) === null || _context_ssrContext1 === void 0 ? void 0 : _context_ssrContext1.response
171
+ };
207
172
  const memoizedContext = useMemo(() => context.runner.pickContext({
208
173
  context,
209
- pickedContext: {}
174
+ pickedContext
210
175
  }, {
211
- onLast: ({ pickedContext }) => pickedContext
176
+ onLast: ({ pickedContext: pickedContext2 }) => pickedContext2
212
177
  }), [
213
178
  context
214
179
  ]);
@@ -1,4 +1,35 @@
1
1
  import { RuntimeReactContext } from "./runtime";
2
+ const globalContext = {};
3
+ function setGlobalContext(context) {
4
+ globalContext.App = context.App;
5
+ globalContext.routes = context.routes;
6
+ globalContext.appInit = context.appInit;
7
+ globalContext.appConfig = typeof context.appConfig === "function" ? context.appConfig() : context.appConfig;
8
+ globalContext.layoutApp = context.layoutApp;
9
+ }
10
+ function getGlobalApp() {
11
+ return globalContext.App;
12
+ }
13
+ function getGlobalRoutes() {
14
+ return globalContext.routes;
15
+ }
16
+ function getGlobalAppInit() {
17
+ var _getGlobalApp, _getGlobalLayoutApp;
18
+ return globalContext.appInit || ((_getGlobalApp = getGlobalApp()) === null || _getGlobalApp === void 0 ? void 0 : _getGlobalApp.init) || ((_getGlobalLayoutApp = getGlobalLayoutApp()) === null || _getGlobalLayoutApp === void 0 ? void 0 : _getGlobalLayoutApp.init);
19
+ }
20
+ function getGlobalAppConfig() {
21
+ var _getGlobalApp, _getGlobalLayoutApp;
22
+ return globalContext.appConfig || ((_getGlobalApp = getGlobalApp()) === null || _getGlobalApp === void 0 ? void 0 : _getGlobalApp.config) || ((_getGlobalLayoutApp = getGlobalLayoutApp()) === null || _getGlobalLayoutApp === void 0 ? void 0 : _getGlobalLayoutApp.config);
23
+ }
24
+ function getGlobalLayoutApp() {
25
+ return globalContext.layoutApp;
26
+ }
2
27
  export {
3
- RuntimeReactContext
28
+ RuntimeReactContext,
29
+ getGlobalApp,
30
+ getGlobalAppConfig,
31
+ getGlobalAppInit,
32
+ getGlobalLayoutApp,
33
+ getGlobalRoutes,
34
+ setGlobalContext
4
35
  };
@@ -3,11 +3,11 @@ import { ROUTE_MANIFEST } from "@modern-js/utils/universal/constants";
3
3
  import { createLoaderManager } from "../loader/loaderManager";
4
4
  const RuntimeReactContext = createContext({});
5
5
  const ServerRouterContext = createContext({});
6
- const getInitialContext = (runner) => ({
6
+ const getInitialContext = (runner, isBrowser = true, routeManifest) => ({
7
7
  loaderManager: createLoaderManager({}),
8
8
  runner,
9
- isBrowser: true,
10
- routeManifest: typeof window !== "undefined" && window[ROUTE_MANIFEST]
9
+ isBrowser,
10
+ routeManifest: routeManifest || typeof window !== "undefined" && window[ROUTE_MANIFEST]
11
11
  });
12
12
  export {
13
13
  RuntimeReactContext,
@@ -14,7 +14,7 @@ const useLoader = (loaderFn, options = {
14
14
  delete options._cache;
15
15
  }
16
16
  const load = useCallback((params) => {
17
- var _unlistenLoaderChangeRef_current, _window__SSR_DATA_data_loadersData_id, _window__SSR_DATA_data, _window__SSR_DATA, _window, _loaderRef_current;
17
+ var _unlistenLoaderChangeRef_current, _window__SSR_DATA_data_loadersData_id, _window__SSR_DATA_data_loadersData, _window__SSR_DATA_data, _window__SSR_DATA, _window, _loaderRef_current;
18
18
  if (typeof params === "undefined") {
19
19
  var _loaderRef_current1;
20
20
  return (_loaderRef_current1 = loaderRef.current) === null || _loaderRef_current1 === void 0 ? void 0 : _loaderRef_current1.load();
@@ -41,7 +41,7 @@ const useLoader = (loaderFn, options = {
41
41
  if (options.skip) {
42
42
  return void 0;
43
43
  }
44
- if (context._hydration && ((_window = window) === null || _window === void 0 ? void 0 : (_window__SSR_DATA = _window._SSR_DATA) === null || _window__SSR_DATA === void 0 ? void 0 : (_window__SSR_DATA_data = _window__SSR_DATA.data) === null || _window__SSR_DATA_data === void 0 ? void 0 : (_window__SSR_DATA_data_loadersData_id = _window__SSR_DATA_data.loadersData[id]) === null || _window__SSR_DATA_data_loadersData_id === void 0 ? void 0 : _window__SSR_DATA_data_loadersData_id.error) === null) {
44
+ if (context._hydration && ((_window = window) === null || _window === void 0 ? void 0 : (_window__SSR_DATA = _window._SSR_DATA) === null || _window__SSR_DATA === void 0 ? void 0 : (_window__SSR_DATA_data = _window__SSR_DATA.data) === null || _window__SSR_DATA_data === void 0 ? void 0 : (_window__SSR_DATA_data_loadersData = _window__SSR_DATA_data.loadersData) === null || _window__SSR_DATA_data_loadersData === void 0 ? void 0 : (_window__SSR_DATA_data_loadersData_id = _window__SSR_DATA_data_loadersData[id]) === null || _window__SSR_DATA_data_loadersData_id === void 0 ? void 0 : _window__SSR_DATA_data_loadersData_id.error) === null) {
45
45
  return void 0;
46
46
  }
47
47
  const res = loaderRef.current.load();
@@ -1,14 +1,10 @@
1
1
  import { createManager, createPipeline, createAsyncPipeline } from "@modern-js/plugin";
2
- const client = createAsyncPipeline();
3
- const server = createAsyncPipeline();
4
2
  const hoc = createPipeline();
5
3
  const init = createAsyncPipeline();
6
4
  const pickContext = createPipeline();
7
5
  const runtimeHooks = {
8
6
  hoc,
9
7
  init,
10
- client,
11
- server,
12
8
  pickContext
13
9
  };
14
10
  const createRuntime = () => createManager(runtimeHooks);