@modern-js/runtime 2.54.5 → 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
@@ -1,3 +1,4 @@
1
+ import { merge } from "@modern-js/utils/lodash";
1
2
  import { runtime } from "./base";
2
3
  import { setGlobalRunner } from "./runner";
3
4
  export * from "./base";
@@ -8,6 +9,10 @@ function registerPlugin(internalPlugins, runtimeConfig, customRuntime) {
8
9
  setGlobalRunner(runner);
9
10
  return runner;
10
11
  }
12
+ function mergeConfig(config, ...otherConfig) {
13
+ return merge(config, ...otherConfig);
14
+ }
11
15
  export {
16
+ mergeConfig,
12
17
  registerPlugin
13
18
  };
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { RuntimeReactContext, getGlobalApp } from "../context";
3
+ import { getGlobalRunner } from "../plugin/runner";
4
+ function createRoot(UserApp, config) {
5
+ const App = UserApp || getGlobalApp();
6
+ const runner = getGlobalRunner();
7
+ const HOCApp = runner.hoc({
8
+ App,
9
+ config: config || {}
10
+ }, {
11
+ onLast: ({ App: App2 }) => {
12
+ const WrapComponent = ({ _internal_context, ...props }) => {
13
+ return /* @__PURE__ */ _jsx(RuntimeReactContext.Provider, {
14
+ value: _internal_context,
15
+ children: /* @__PURE__ */ _jsx(App2, {
16
+ ...props
17
+ })
18
+ });
19
+ };
20
+ return WrapComponent;
21
+ }
22
+ });
23
+ return HOCApp;
24
+ }
25
+ export {
26
+ createRoot
27
+ };
@@ -5,7 +5,10 @@ const RE_BODY_ATTR = /<body[^>]*>/;
5
5
  const RE_LAST_IN_HEAD = /<\/head>/;
6
6
  const RE_TITLE = /<title[^>]*>([\s\S\n\r]*?)<\/title>/;
7
7
  const TEST_TITLE_CONTENT = RegExp("(?<=<title[^>]*>)([\\s\\S\\n\\r]*?)([.|\\S])([\\s\\S\\n\\r]*?)(?=<\\/title>)");
8
- function helmet(content, helmetData) {
8
+ function createReplaceHelemt(helmetData) {
9
+ return helmetData ? (template) => helmetReplace(template, helmetData) : (tempalte) => tempalte;
10
+ }
11
+ function helmetReplace(content, helmetData) {
9
12
  let result = content;
10
13
  const bodyAttributes = helmetData.bodyAttributes.toString();
11
14
  if (bodyAttributes) {
@@ -41,5 +44,6 @@ function helmet(content, helmetData) {
41
44
  return safeReplace(result, RE_LAST_IN_HEAD, `${helmetStr}</head>`);
42
45
  }
43
46
  export {
44
- helmet as default
47
+ createReplaceHelemt,
48
+ helmetReplace
45
49
  };
@@ -0,0 +1,12 @@
1
+ import { PreRender, NoSSR } from "./react";
2
+ const ssr = (_config) => ({
3
+ name: "@modern-js/plugin-ssr",
4
+ setup: () => ({})
5
+ });
6
+ var server_default = ssr;
7
+ export {
8
+ NoSSR,
9
+ PreRender,
10
+ server_default as default,
11
+ ssr
12
+ };
@@ -0,0 +1,132 @@
1
+ import { getPathname, parseCookie, parseHeaders, parseQuery } from "@modern-js/runtime-utils/universal/request";
2
+ import { createRoot } from "../react";
3
+ import { getGlobalAppInit } from "../context";
4
+ import { getGlobalRunner } from "../plugin/runner";
5
+ import { getInitialContext } from "../context/runtime";
6
+ import { createLoaderManager } from "../loader/loaderManager";
7
+ import { getSSRConfigByEntry, getSSRMode } from "./utils";
8
+ import { CHUNK_CSS_PLACEHOLDER } from "./constants";
9
+ function createSSRContext(request, options) {
10
+ const { config, loaderContext, onError, onTiming, locals, resource, params, responseProxy, staticGenerate, logger, metrics, reporter } = options;
11
+ const { nonce } = config;
12
+ const { entryName, route } = resource;
13
+ const cookie = request.headers.get("cookie");
14
+ const cookieMap = parseCookie(request);
15
+ const pathname = getPathname(request);
16
+ const query = parseQuery(request);
17
+ const headersData = parseHeaders(request);
18
+ const url = new URL(request.url);
19
+ const ssrConfig = getSSRConfigByEntry(entryName, config.ssr, config.ssrByEntries, staticGenerate);
20
+ const ssrMode = getSSRMode(ssrConfig);
21
+ const loaderFailureMode = typeof ssrConfig === "object" ? ssrConfig.loaderFailureMode : void 0;
22
+ return {
23
+ nonce,
24
+ loaderContext,
25
+ redirection: {},
26
+ htmlModifiers: [],
27
+ logger,
28
+ metrics,
29
+ request: {
30
+ baseUrl: route.urlPath,
31
+ userAgent: request.headers.get("user-agent"),
32
+ cookie,
33
+ cookieMap,
34
+ pathname,
35
+ query,
36
+ params,
37
+ headers: headersData,
38
+ host: url.host,
39
+ raw: request
40
+ },
41
+ response: {
42
+ setHeader(key, value) {
43
+ responseProxy.headers[key] = value;
44
+ },
45
+ status(code) {
46
+ responseProxy.code = code;
47
+ },
48
+ locals: locals || {}
49
+ },
50
+ reporter,
51
+ mode: ssrMode,
52
+ onError,
53
+ onTiming,
54
+ loaderFailureMode
55
+ };
56
+ }
57
+ const createRequestHandler = async (handleRequest) => {
58
+ const requestHandler = async (request, options) => {
59
+ const Root = createRoot();
60
+ const runner = getGlobalRunner();
61
+ const { routeManifest } = options.resource;
62
+ const context = getInitialContext(runner, false, routeManifest);
63
+ const runInit = (_context) => runner.init({
64
+ context: _context
65
+ }, {
66
+ onLast: ({ context: context1 }) => {
67
+ const init = getGlobalAppInit();
68
+ return init === null || init === void 0 ? void 0 : init(context1);
69
+ }
70
+ });
71
+ const responseProxy = {
72
+ headers: {},
73
+ code: -1
74
+ };
75
+ const ssrContext = createSSRContext(request, {
76
+ ...options,
77
+ responseProxy
78
+ });
79
+ Object.assign(context, {
80
+ ssrContext,
81
+ isBrowser: false,
82
+ loaderManager: createLoaderManager({}, {
83
+ skipNonStatic: options.staticGenerate,
84
+ // if not static generate, only non-static loader can exec on prod env
85
+ skipStatic: process.env.NODE_ENV === "production" && !options.staticGenerate
86
+ })
87
+ });
88
+ const getRedirectResponse = (result) => {
89
+ if (typeof Response !== "undefined" && // fix: ssg workflow doesn't inject Web Response
90
+ result instanceof Response && result.status >= 300 && result.status <= 399) {
91
+ const { status } = result;
92
+ const redirectUrl = result.headers.get("Location") || "/";
93
+ const { ssrContext: ssrContext2 } = context;
94
+ if (ssrContext2) {
95
+ return new Response(null, {
96
+ status,
97
+ headers: {
98
+ Location: redirectUrl
99
+ }
100
+ });
101
+ }
102
+ }
103
+ return void 0;
104
+ };
105
+ const initialData = await runInit(context);
106
+ context.initialData = initialData;
107
+ const redirectResponse = getRedirectResponse(initialData);
108
+ if (redirectResponse) {
109
+ return redirectResponse;
110
+ }
111
+ const { htmlTemplate } = options.resource;
112
+ options.resource.htmlTemplate = htmlTemplate.replace("</head>", `${CHUNK_CSS_PLACEHOLDER}</head>`);
113
+ const response = await handleRequest(request, Root, {
114
+ ...options,
115
+ runtimeContext: context
116
+ });
117
+ Object.entries(responseProxy.headers).forEach(([key, value]) => {
118
+ response.headers.set(key, value);
119
+ });
120
+ if (responseProxy.code !== -1) {
121
+ return new Response(response.body, {
122
+ status: responseProxy.code,
123
+ headers: response.headers
124
+ });
125
+ }
126
+ return response;
127
+ };
128
+ return requestHandler;
129
+ };
130
+ export {
131
+ createRequestHandler
132
+ };
@@ -0,0 +1,8 @@
1
+ import { renderString } from "./string";
2
+ import { renderStreaming } from "./stream";
3
+ import { createRequestHandler } from "./requestHandler";
4
+ export {
5
+ createRequestHandler,
6
+ renderStreaming,
7
+ renderString
8
+ };
@@ -0,0 +1,6 @@
1
+ function buildHtml(template, callbacks) {
2
+ return callbacks.reduce((promise, buildHtmlCb) => promise.then((template2) => buildHtmlCb(template2)), Promise.resolve(template));
3
+ }
4
+ export {
5
+ buildHtml
6
+ };
@@ -0,0 +1,56 @@
1
+ import { serializeJson } from "@modern-js/runtime-utils/node";
2
+ import { attributesToString, safeReplace } from "../utils";
3
+ import { SSR_DATA_PLACEHOLDER } from "../constants";
4
+ import { buildHtml } from "../shared";
5
+ function buildShellAfterTemplate(afterAppTemplate, options) {
6
+ const { request, config, ssrConfig, runtimeContext, renderLevel } = options;
7
+ const callbacks = [
8
+ createReplaceSSRData({
9
+ request,
10
+ ssrConfig,
11
+ nonce: config.nonce,
12
+ runtimeContext,
13
+ renderLevel
14
+ })
15
+ ];
16
+ return buildHtml(afterAppTemplate, callbacks);
17
+ }
18
+ function createReplaceSSRData(options) {
19
+ const { runtimeContext, nonce, renderLevel, ssrConfig } = options;
20
+ const { request, reporter } = runtimeContext.ssrContext;
21
+ const headers = typeof ssrConfig === "object" && ssrConfig.unsafeHeaders ? Object.fromEntries(Object.entries(request.headers).filter(([key, _]) => {
22
+ var _ssrConfig_unsafeHeaders_map, _ssrConfig_unsafeHeaders;
23
+ return (_ssrConfig_unsafeHeaders = ssrConfig.unsafeHeaders) === null || _ssrConfig_unsafeHeaders === void 0 ? void 0 : (_ssrConfig_unsafeHeaders_map = _ssrConfig_unsafeHeaders.map((header) => header.toLowerCase())) === null || _ssrConfig_unsafeHeaders_map === void 0 ? void 0 : _ssrConfig_unsafeHeaders_map.includes(key.toLowerCase());
24
+ })) : void 0;
25
+ const ssrData = {
26
+ data: {
27
+ initialData: runtimeContext.initialData,
28
+ i18nData: runtimeContext.__i18nData__
29
+ },
30
+ context: {
31
+ reporter: {
32
+ sessionId: reporter === null || reporter === void 0 ? void 0 : reporter.sessionId
33
+ },
34
+ request: {
35
+ query: request.query,
36
+ params: request.params,
37
+ pathname: request.pathname,
38
+ host: request.host,
39
+ url: request.raw.url,
40
+ headers
41
+ }
42
+ },
43
+ mode: "stream",
44
+ renderLevel
45
+ };
46
+ const attrsStr = attributesToString({
47
+ nonce
48
+ });
49
+ const ssrDataScript = `
50
+ <script${attrsStr}>window._SSR_DATA = ${serializeJson(ssrData)}</script>
51
+ `;
52
+ return (template) => safeReplace(template, SSR_DATA_PLACEHOLDER, ssrDataScript);
53
+ }
54
+ export {
55
+ buildShellAfterTemplate
56
+ };
@@ -1,9 +1,9 @@
1
1
  import ReactHelmet from "react-helmet";
2
2
  import { matchRoutes } from "@modern-js/runtime-utils/router";
3
- import helmetReplace from "../helmet";
3
+ import { createReplaceHelemt } from "../helmet";
4
4
  import { CHUNK_CSS_PLACEHOLDER } from "../constants";
5
5
  import { checkIsNode, safeReplace } from "../utils";
6
- import { buildTemplate } from "./buildTemplate.share";
6
+ import { buildHtml } from "../shared";
7
7
  const readAsset = async (chunk) => {
8
8
  const fs = await import("fs/promises");
9
9
  const path = await import("path");
@@ -21,16 +21,15 @@ const checkIsInline = (chunk, enableInline) => {
21
21
  return false;
22
22
  }
23
23
  };
24
- async function buildShellBeforeTemplate(beforeAppTemplate, context, pluginConfig, styledComponentsStyleTags) {
24
+ async function buildShellBeforeTemplate(beforeAppTemplate, options) {
25
+ const { config, runtimeContext, styledComponentsStyleTags } = options;
25
26
  const helmetData = ReactHelmet.renderStatic();
26
27
  const callbacks = [
27
- (headTemplate) => {
28
- return helmetData ? helmetReplace(headTemplate, helmetData) : headTemplate;
29
- },
28
+ createReplaceHelemt(helmetData),
30
29
  // @TODO: prefetch scripts of lazy component
31
30
  (template) => injectCss(template, styledComponentsStyleTags)
32
31
  ];
33
- return buildTemplate(beforeAppTemplate, callbacks);
32
+ return buildHtml(beforeAppTemplate, callbacks);
34
33
  async function injectCss(template, styledComponentsStyleTags2) {
35
34
  let css = await getCssChunks();
36
35
  if (styledComponentsStyleTags2) {
@@ -38,7 +37,7 @@ async function buildShellBeforeTemplate(beforeAppTemplate, context, pluginConfig
38
37
  }
39
38
  return safeReplace(template, CHUNK_CSS_PLACEHOLDER, css);
40
39
  async function getCssChunks() {
41
- const { routeManifest, routerContext, routes } = context;
40
+ const { routeManifest, routerContext, routes } = runtimeContext;
42
41
  if (!routeManifest || !routerContext || !routes) {
43
42
  return "";
44
43
  }
@@ -59,7 +58,7 @@ async function buildShellBeforeTemplate(beforeAppTemplate, context, pluginConfig
59
58
  }
60
59
  }
61
60
  });
62
- const { enableInlineStyles } = pluginConfig;
61
+ const { enableInlineStyles } = config;
63
62
  const styles = await Promise.all(cssChunks.map(async (chunk) => {
64
63
  const link = `<link href="${chunk}" rel="stylesheet" />`;
65
64
  if (checkIsNode() && checkIsInline(chunk, enableInlineStyles)) {
@@ -1,46 +1,46 @@
1
1
  import { Transform } from "stream";
2
+ import { renderToPipeableStream } from "react-dom/server";
3
+ import { createReadableStreamFromReadable } from "@modern-js/runtime-utils/node";
2
4
  import { ServerStyleSheet } from "styled-components";
3
- import { RenderLevel } from "../types";
5
+ import checkIsBot from "isbot";
4
6
  import { ESCAPED_SHELL_STREAM_END_MARK } from "../../../common";
7
+ import { RenderLevel } from "../../constants";
5
8
  import { getTemplates } from "./template";
6
- var ShellChunkStatus;
7
- (function(ShellChunkStatus2) {
8
- ShellChunkStatus2[ShellChunkStatus2["START"] = 0] = "START";
9
- ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
10
- })(ShellChunkStatus || (ShellChunkStatus = {}));
11
- function renderToPipe(rootElement, context, pluginConfig, options) {
12
- var _context_ssrContext;
13
- let shellChunkStatus = 0;
9
+ import { ShellChunkStatus, getReadableStreamFromString } from "./shared";
10
+ const createReadableStreamFromElement = (request, rootElement, options) => {
11
+ const { runtimeContext, htmlTemplate, config, ssrConfig } = options;
12
+ let shellChunkStatus = ShellChunkStatus.START;
13
+ let renderLevel = RenderLevel.SERVER_RENDER;
14
14
  const forceStream2String = Boolean(process.env.MODERN_JS_STREAM_TO_STRING);
15
- const onReady = ((_context_ssrContext = context.ssrContext) === null || _context_ssrContext === void 0 ? void 0 : _context_ssrContext.isSpider) || forceStream2String ? "onAllReady" : "onShellReady";
15
+ const isbot = checkIsBot(request.headers.get("user-agent"));
16
+ const onReady = isbot || forceStream2String ? "onAllReady" : "onShellReady";
16
17
  const sheet = new ServerStyleSheet();
17
- const { ssrContext } = context;
18
18
  const chunkVec = [];
19
- const forUserPipe = new Promise((resolve) => {
20
- let renderToPipeableStream;
21
- try {
22
- ({ renderToPipeableStream } = require("react-dom/server"));
23
- } catch (e) {
24
- }
25
- const root = forceStream2String ? sheet.collectStyles(rootElement) : rootElement;
26
- let renderLevel = RenderLevel.SERVER_RENDER;
19
+ const root = forceStream2String ? sheet.collectStyles(rootElement) : rootElement;
20
+ return new Promise((resolve) => {
27
21
  const { pipe } = renderToPipeableStream(root, {
28
- ...options,
29
- nonce: ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.nonce,
22
+ nonce: config.nonce,
30
23
  [onReady]() {
24
+ var _options_onReady;
31
25
  const styledComponentsStyleTags = forceStream2String ? sheet.getStyleTags() : "";
32
- getTemplates(context, renderLevel, pluginConfig, styledComponentsStyleTags).then(({ shellAfter, shellBefore }) => {
33
- var _options_onReady;
34
- options === null || options === void 0 ? void 0 : (_options_onReady = options[onReady]) === null || _options_onReady === void 0 ? void 0 : _options_onReady.call(options);
35
- const injectableTransform = new Transform({
26
+ (_options_onReady = options[onReady]) === null || _options_onReady === void 0 ? void 0 : _options_onReady.call(options);
27
+ getTemplates(htmlTemplate, {
28
+ request,
29
+ ssrConfig,
30
+ renderLevel,
31
+ runtimeContext,
32
+ config,
33
+ styledComponentsStyleTags
34
+ }).then(({ shellAfter, shellBefore }) => {
35
+ const body = new Transform({
36
36
  transform(chunk, _encoding, callback) {
37
37
  try {
38
- if (shellChunkStatus !== 1) {
38
+ if (shellChunkStatus !== ShellChunkStatus.FINISH) {
39
39
  chunkVec.push(chunk.toString());
40
40
  let concatedChunk = chunkVec.join("");
41
41
  if (concatedChunk.includes(ESCAPED_SHELL_STREAM_END_MARK)) {
42
42
  concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, "");
43
- shellChunkStatus = 1;
43
+ shellChunkStatus = ShellChunkStatus.FINISH;
44
44
  this.push(`${shellBefore}${concatedChunk}${shellAfter}`);
45
45
  }
46
46
  } else {
@@ -56,16 +56,24 @@ function renderToPipe(rootElement, context, pluginConfig, options) {
56
56
  }
57
57
  }
58
58
  });
59
- pipe(injectableTransform);
60
- resolve(injectableTransform);
59
+ const stream = createReadableStreamFromReadable(body);
60
+ resolve(stream);
61
+ pipe(body);
61
62
  });
62
63
  },
63
64
  onShellError(error) {
64
65
  renderLevel = RenderLevel.CLIENT_RENDER;
65
- getTemplates(context, renderLevel, pluginConfig).then(({ shellAfter, shellBefore }) => {
66
+ getTemplates(htmlTemplate, {
67
+ request,
68
+ ssrConfig,
69
+ renderLevel,
70
+ runtimeContext,
71
+ config
72
+ }).then(({ shellAfter, shellBefore }) => {
66
73
  var _options_onShellError;
67
74
  const fallbackHtml = `${shellBefore}${shellAfter}`;
68
- resolve(fallbackHtml);
75
+ const readableStream = getReadableStreamFromString(fallbackHtml);
76
+ resolve(readableStream);
69
77
  options === null || options === void 0 ? void 0 : (_options_onShellError = options.onShellError) === null || _options_onShellError === void 0 ? void 0 : _options_onShellError.call(options, error);
70
78
  });
71
79
  },
@@ -76,9 +84,7 @@ function renderToPipe(rootElement, context, pluginConfig, options) {
76
84
  }
77
85
  });
78
86
  });
79
- return forUserPipe;
80
- }
81
- var renderToPipe_default = renderToPipe;
87
+ };
82
88
  export {
83
- renderToPipe_default as default
89
+ createReadableStreamFromElement
84
90
  };
@@ -0,0 +1,71 @@
1
+ import { renderToReadableStream } from "react-dom/server";
2
+ import checkIsBot from "isbot";
3
+ import { RenderLevel } from "../../constants";
4
+ import { ESCAPED_SHELL_STREAM_END_MARK } from "../../../common";
5
+ import { ShellChunkStatus, encodeForWebStream, getReadableStreamFromString } from "./shared";
6
+ import { getTemplates } from "./template";
7
+ const createReadableStreamFromElement = async (request, rootElement, options) => {
8
+ let shellChunkStatus = ShellChunkStatus.START;
9
+ const chunkVec = [];
10
+ const { htmlTemplate, runtimeContext, config, ssrConfig } = options;
11
+ const { shellBefore, shellAfter } = await getTemplates(htmlTemplate, {
12
+ renderLevel: RenderLevel.SERVER_RENDER,
13
+ runtimeContext,
14
+ ssrConfig,
15
+ request,
16
+ config
17
+ });
18
+ try {
19
+ var _options_onShellReady;
20
+ const readableOriginal = await renderToReadableStream(rootElement, {
21
+ nonce: config.nonce,
22
+ onError(error) {
23
+ var _options_onError;
24
+ (_options_onError = options.onError) === null || _options_onError === void 0 ? void 0 : _options_onError.call(options, error);
25
+ }
26
+ });
27
+ (_options_onShellReady = options.onShellReady) === null || _options_onShellReady === void 0 ? void 0 : _options_onShellReady.call(options);
28
+ readableOriginal.allReady.then(() => {
29
+ var _options_onAllReady;
30
+ options === null || options === void 0 ? void 0 : (_options_onAllReady = options.onAllReady) === null || _options_onAllReady === void 0 ? void 0 : _options_onAllReady.call(options);
31
+ });
32
+ const isbot = checkIsBot(request.headers.get("user-agent"));
33
+ if (isbot) {
34
+ await readableOriginal.allReady;
35
+ }
36
+ const reader = readableOriginal.getReader();
37
+ const stream = new ReadableStream({
38
+ start(controller) {
39
+ async function push() {
40
+ const { done, value } = await reader.read();
41
+ if (done) {
42
+ controller.close();
43
+ return;
44
+ }
45
+ if (shellChunkStatus !== ShellChunkStatus.FINISH) {
46
+ const chunk = new TextDecoder().decode(value);
47
+ chunkVec.push(chunk);
48
+ let concatedChunk = chunkVec.join("");
49
+ if (concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
50
+ concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, "");
51
+ shellChunkStatus = ShellChunkStatus.FINISH;
52
+ controller.enqueue(encodeForWebStream(`${shellBefore}${concatedChunk}${shellAfter}`));
53
+ }
54
+ } else {
55
+ controller.enqueue(value);
56
+ }
57
+ push();
58
+ }
59
+ push();
60
+ }
61
+ });
62
+ return stream;
63
+ } catch (e) {
64
+ const fallbackHtml = `${shellBefore}${shellAfter}`;
65
+ const stream = getReadableStreamFromString(fallbackHtml);
66
+ return stream;
67
+ }
68
+ };
69
+ export {
70
+ createReadableStreamFromElement
71
+ };
@@ -0,0 +1,6 @@
1
+ import { createReadableStreamFromElement } from "./createReadableStream";
2
+ import { createRenderStreaming } from "./shared";
3
+ const renderStreaming = createRenderStreaming(createReadableStreamFromElement);
4
+ export {
5
+ renderStreaming
6
+ };
@@ -0,0 +1,75 @@
1
+ import { time } from "@modern-js/runtime-utils/time";
2
+ import { parseHeaders } from "@modern-js/runtime-utils/universal/request";
3
+ import { run } from "@modern-js/runtime-utils/node";
4
+ import React from "react";
5
+ import { SSRErrors, SSRTimings, createOnError, createOnTiming } from "../tracer";
6
+ import { getSSRConfigByEntry } from "../utils";
7
+ var ShellChunkStatus;
8
+ (function(ShellChunkStatus2) {
9
+ ShellChunkStatus2[ShellChunkStatus2["START"] = 0] = "START";
10
+ ShellChunkStatus2[ShellChunkStatus2["FINISH"] = 1] = "FINISH";
11
+ })(ShellChunkStatus || (ShellChunkStatus = {}));
12
+ let encoder;
13
+ function encodeForWebStream(thing) {
14
+ if (!encoder) {
15
+ encoder = new TextEncoder();
16
+ }
17
+ if (typeof thing === "string") {
18
+ return encoder.encode(thing);
19
+ }
20
+ return thing;
21
+ }
22
+ function getReadableStreamFromString(content) {
23
+ const readableStream = new ReadableStream({
24
+ start(controller) {
25
+ controller.enqueue(encodeForWebStream(content));
26
+ controller.close();
27
+ }
28
+ });
29
+ return readableStream;
30
+ }
31
+ function createRenderStreaming(createReadableStreamFromElement) {
32
+ return async (request, serverRoot, options) => {
33
+ const headersData = parseHeaders(request);
34
+ return run(headersData, async () => {
35
+ const end = time();
36
+ const { runtimeContext, config, resource, staticGenerate } = options;
37
+ const onError = createOnError(options.onError);
38
+ const onTiming = createOnTiming(options.onTiming);
39
+ const { htmlTemplate, entryName } = resource;
40
+ const ssrConfig = getSSRConfigByEntry(entryName, config.ssr, config.ssrByEntries, staticGenerate);
41
+ const rootElement = React.cloneElement(serverRoot, {
42
+ _internal_context: Object.assign(runtimeContext, {
43
+ ssr: true
44
+ })
45
+ });
46
+ const stream = await createReadableStreamFromElement(request, rootElement, {
47
+ config,
48
+ htmlTemplate,
49
+ runtimeContext,
50
+ ssrConfig,
51
+ onShellReady() {
52
+ const cost = end();
53
+ onTiming(SSRTimings.RENDER_SHELL, cost);
54
+ },
55
+ onAllReady() {
56
+ const cost = end();
57
+ onTiming(SSRTimings.RENDER_HTML, cost);
58
+ },
59
+ onShellError(error) {
60
+ onError(SSRErrors.RENDER_SHELL, error);
61
+ },
62
+ onError(error) {
63
+ onError(SSRErrors.RENDER_STREAM, error);
64
+ }
65
+ });
66
+ return stream;
67
+ });
68
+ };
69
+ }
70
+ export {
71
+ ShellChunkStatus,
72
+ createRenderStreaming,
73
+ encodeForWebStream,
74
+ getReadableStreamFromString
75
+ };
@@ -0,0 +1,15 @@
1
+ import { buildShellBeforeTemplate } from "./beforeTemplate";
2
+ import { buildShellAfterTemplate } from "./afterTemplate";
3
+ const HTML_SEPARATOR = "<!--<?- html ?>-->";
4
+ const getTemplates = async (htmlTemplate, options) => {
5
+ const [beforeAppTemplate = "", afterAppHtmlTemplate = ""] = htmlTemplate.split(HTML_SEPARATOR) || [];
6
+ const builtBeforeTemplate = await buildShellBeforeTemplate(beforeAppTemplate, options);
7
+ const builtAfterTemplate = await buildShellAfterTemplate(afterAppHtmlTemplate, options);
8
+ return {
9
+ shellBefore: builtBeforeTemplate,
10
+ shellAfter: builtAfterTemplate
11
+ };
12
+ };
13
+ export {
14
+ getTemplates
15
+ };