@modern-js/runtime 2.54.6 → 2.56.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 (309) 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 +91 -17
  5. package/dist/cjs/cli/ssr/index.js +137 -0
  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 +142 -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/core/server/string/styledComponent.js +53 -0
  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/{ssr/serverRender/renderToString/styledComponent.js → core/utils/merge.js} +28 -19
  39. package/dist/cjs/router/cli/code/index.js +12 -8
  40. package/dist/cjs/router/cli/code/templates.js +58 -3
  41. package/dist/cjs/router/cli/constants.js +6 -0
  42. package/dist/cjs/router/cli/entry.js +16 -17
  43. package/dist/cjs/router/cli/handler.js +22 -5
  44. package/dist/cjs/router/cli/index.js +29 -56
  45. package/dist/cjs/router/runtime/PrefetchLink.js +1 -1
  46. package/dist/cjs/router/runtime/index.js +2 -0
  47. package/dist/cjs/router/runtime/plugin.js +13 -40
  48. package/dist/cjs/router/runtime/plugin.node.js +24 -46
  49. package/dist/cjs/state/cli/index.js +7 -35
  50. package/dist/cjs/state/runtime/plugin.js +6 -15
  51. package/dist/esm/cli/alias.js +30 -0
  52. package/dist/esm/cli/code.js +131 -0
  53. package/dist/esm/cli/constants.js +15 -1
  54. package/dist/esm/cli/index.js +110 -18
  55. package/dist/esm/{ssr/cli → cli/ssr}/babel-plugin-ssr-loader-id.js +1 -1
  56. package/dist/esm/cli/ssr/index.js +127 -0
  57. package/dist/esm/{ssr/cli → cli/ssr}/loadable-bundler-plugin.js +1 -1
  58. package/dist/esm/cli/template.js +53 -0
  59. package/dist/esm/cli/template.server.js +26 -0
  60. package/dist/esm/core/browser/hydrate.js +88 -0
  61. package/dist/esm/core/browser/index.js +242 -0
  62. package/dist/esm/core/compatible.js +48 -90
  63. package/dist/esm/core/context/index.js +32 -1
  64. package/dist/esm/core/context/runtime.js +3 -2
  65. package/dist/esm/core/loader/useLoader.js +2 -2
  66. package/dist/esm/core/plugin/base.js +0 -4
  67. package/dist/esm/core/plugin/index.js +10 -0
  68. package/dist/esm/core/react/index.js +31 -0
  69. package/dist/esm/{ssr/serverRender → core/server}/helmet.js +10 -2
  70. package/dist/esm/core/server/index.js +16 -0
  71. package/dist/esm/core/server/react/prerender/type.js +0 -0
  72. package/dist/esm/core/server/requestHandler.js +181 -0
  73. package/dist/esm/core/server/server.js +8 -0
  74. package/dist/esm/core/server/shared.js +10 -0
  75. package/dist/esm/core/server/stream/afterTemplate.js +60 -0
  76. package/dist/esm/{ssr/serverRender/renderToStream/bulidTemplate.before.js → core/server/stream/beforeTemplate.js} +10 -11
  77. package/dist/esm/{ssr/serverRender/renderToStream/renderToPipe.js → core/server/stream/createReadableStream.js} +43 -38
  78. package/dist/esm/core/server/stream/createReadableStream.worker.js +142 -0
  79. package/dist/esm/core/server/stream/index.js +6 -0
  80. package/dist/esm/core/server/stream/shared.js +102 -0
  81. package/dist/esm/core/server/stream/template.js +42 -0
  82. package/dist/esm/core/server/string/index.js +219 -0
  83. package/dist/esm/{ssr/serverRender/renderToString → core/server/string}/loadable.js +10 -13
  84. package/dist/esm/{ssr → core/server/string}/prefetch.js +28 -22
  85. package/dist/esm/core/server/string/ssrData.js +83 -0
  86. package/dist/esm/core/server/string/styledComponent.js +34 -0
  87. package/dist/esm/core/server/string/types.js +0 -0
  88. package/dist/esm/core/server/tracer.js +34 -0
  89. package/dist/esm/core/server/utils.js +83 -0
  90. package/dist/esm/core/utils/merge.js +32 -0
  91. package/dist/esm/router/cli/code/index.js +13 -10
  92. package/dist/esm/router/cli/code/templates.js +100 -7
  93. package/dist/esm/router/cli/constants.js +4 -0
  94. package/dist/esm/router/cli/entry.js +19 -19
  95. package/dist/esm/router/cli/handler.js +70 -8
  96. package/dist/esm/router/cli/index.js +52 -65
  97. package/dist/esm/router/runtime/PrefetchLink.js +1 -1
  98. package/dist/esm/router/runtime/index.js +1 -0
  99. package/dist/esm/router/runtime/plugin.js +12 -20
  100. package/dist/esm/router/runtime/plugin.node.js +26 -82
  101. package/dist/esm/state/cli/index.js +9 -38
  102. package/dist/esm/state/runtime/plugin.js +5 -5
  103. package/dist/esm-node/cli/alias.js +28 -0
  104. package/dist/esm-node/cli/code.js +90 -0
  105. package/dist/esm-node/cli/constants.js +15 -1
  106. package/dist/esm-node/cli/index.js +83 -13
  107. package/dist/esm-node/{ssr/cli → cli/ssr}/babel-plugin-ssr-loader-id.js +1 -1
  108. package/dist/esm-node/cli/ssr/index.js +103 -0
  109. package/dist/esm-node/{ssr/cli → cli/ssr}/loadable-bundler-plugin.js +1 -1
  110. package/dist/esm-node/cli/template.js +64 -0
  111. package/dist/esm-node/cli/template.server.js +47 -0
  112. package/dist/esm-node/core/browser/hydrate.js +81 -0
  113. package/dist/esm-node/core/browser/index.js +108 -0
  114. package/dist/esm-node/core/compatible.js +39 -74
  115. package/dist/esm-node/core/context/index.js +32 -1
  116. package/dist/esm-node/core/context/runtime.js +3 -3
  117. package/dist/esm-node/core/loader/useLoader.js +2 -2
  118. package/dist/esm-node/core/plugin/base.js +0 -4
  119. package/dist/esm-node/core/plugin/index.js +5 -0
  120. package/dist/esm-node/core/react/index.js +27 -0
  121. package/dist/esm-node/{ssr/serverRender → core/server}/helmet.js +6 -2
  122. package/dist/esm-node/core/server/index.js +12 -0
  123. package/dist/esm-node/core/server/requestHandler.js +132 -0
  124. package/dist/esm-node/core/server/server.js +8 -0
  125. package/dist/esm-node/core/server/shared.js +6 -0
  126. package/dist/esm-node/core/server/stream/afterTemplate.js +56 -0
  127. package/dist/esm-node/{ssr/serverRender/renderToStream/bulidTemplate.before.js → core/server/stream/beforeTemplate.js} +8 -9
  128. package/dist/esm-node/{ssr/serverRender/renderToStream/renderToPipe.js → core/server/stream/createReadableStream.js} +41 -35
  129. package/dist/esm-node/core/server/stream/createReadableStream.worker.js +71 -0
  130. package/dist/esm-node/core/server/stream/index.js +6 -0
  131. package/dist/esm-node/core/server/stream/shared.js +75 -0
  132. package/dist/esm-node/core/server/stream/template.js +15 -0
  133. package/dist/esm-node/core/server/string/index.js +118 -0
  134. package/dist/esm-node/{ssr/serverRender/renderToString → core/server/string}/loadable.js +8 -11
  135. package/dist/esm-node/core/server/string/prefetch.js +78 -0
  136. package/dist/esm-node/core/server/string/ssrData.js +76 -0
  137. package/dist/esm-node/core/server/string/styledComponent.js +29 -0
  138. package/dist/esm-node/core/server/tracer.js +33 -0
  139. package/dist/esm-node/core/server/utils.js +60 -0
  140. package/dist/esm-node/core/utils/merge.js +29 -0
  141. package/dist/esm-node/router/cli/code/index.js +10 -7
  142. package/dist/esm-node/router/cli/code/templates.js +60 -6
  143. package/dist/esm-node/router/cli/constants.js +4 -0
  144. package/dist/esm-node/router/cli/entry.js +16 -17
  145. package/dist/esm-node/router/cli/handler.js +21 -5
  146. package/dist/esm-node/router/cli/index.js +31 -58
  147. package/dist/esm-node/router/runtime/PrefetchLink.js +1 -1
  148. package/dist/esm-node/router/runtime/index.js +1 -0
  149. package/dist/esm-node/router/runtime/plugin.js +13 -30
  150. package/dist/esm-node/router/runtime/plugin.node.js +25 -46
  151. package/dist/esm-node/state/cli/index.js +8 -36
  152. package/dist/esm-node/state/runtime/plugin.js +5 -5
  153. package/dist/types/cli/alias.d.ts +7 -0
  154. package/dist/types/cli/code.d.ts +10 -0
  155. package/dist/types/cli/constants.d.ts +7 -0
  156. package/dist/types/cli/index.d.ts +8 -1
  157. package/dist/types/cli/template.d.ts +27 -0
  158. package/dist/types/cli/template.server.d.ts +15 -0
  159. package/dist/types/common.d.ts +9 -0
  160. package/dist/types/core/browser/hydrate.d.ts +5 -0
  161. package/dist/types/core/browser/index.d.ts +3 -0
  162. package/dist/types/core/config.d.ts +5 -6
  163. package/dist/types/core/constants.d.ts +5 -0
  164. package/dist/types/core/context/index.d.ts +34 -1
  165. package/dist/types/core/context/runtime.d.ts +2 -2
  166. package/dist/types/core/plugin/base.d.ts +3 -33
  167. package/dist/types/core/plugin/index.d.ts +2 -11
  168. package/dist/types/core/plugin/runner.d.ts +1 -11
  169. package/dist/types/core/react/index.d.ts +6 -0
  170. package/dist/types/core/server/helmet.d.ts +3 -0
  171. package/dist/types/core/server/index.d.ts +4 -0
  172. package/dist/types/core/server/requestHandler.d.ts +11 -0
  173. package/dist/types/core/server/server.d.ts +4 -0
  174. package/dist/types/core/server/shared.d.ts +9 -0
  175. package/dist/types/core/server/stream/afterTemplate.d.ts +12 -0
  176. package/dist/types/core/server/stream/beforeTemplate.d.ts +8 -0
  177. package/dist/types/core/server/stream/createReadableStream.d.ts +2 -0
  178. package/dist/types/core/server/stream/createReadableStream.worker.d.ts +2 -0
  179. package/dist/types/core/server/stream/index.d.ts +1 -0
  180. package/dist/types/core/server/stream/shared.d.ts +22 -0
  181. package/dist/types/core/server/stream/template.d.ts +9 -0
  182. package/dist/types/core/server/string/index.d.ts +2 -0
  183. package/dist/types/core/server/string/loadable.d.ts +35 -0
  184. package/dist/types/core/server/string/prefetch.d.ts +16 -0
  185. package/dist/types/core/server/string/ssrData.d.ts +18 -0
  186. package/dist/types/core/server/string/styledComponent.d.ts +11 -0
  187. package/dist/types/core/server/string/types.d.ts +12 -0
  188. package/dist/types/core/server/tracer.d.ts +21 -0
  189. package/dist/types/core/server/utils.d.ts +19 -0
  190. package/dist/types/core/types.d.ts +35 -1
  191. package/dist/types/core/utils/merge.d.ts +6 -0
  192. package/dist/types/index.d.ts +1 -1
  193. package/dist/types/router/cli/code/index.d.ts +3 -4
  194. package/dist/types/router/cli/code/templates.d.ts +9 -1
  195. package/dist/types/router/cli/constants.d.ts +2 -0
  196. package/dist/types/router/cli/handler.d.ts +1 -0
  197. package/dist/types/router/runtime/index.d.ts +1 -0
  198. package/dist/types/router/runtime/plugin.d.ts +1 -1
  199. package/dist/types/router/runtime/plugin.node.d.ts +1 -3
  200. package/dist/types/router/runtime/types.d.ts +1 -2
  201. package/dist/types/state/runtime/plugin.d.ts +2 -2
  202. package/package.json +52 -45
  203. package/types/router.d.ts +7 -2
  204. package/dist/cjs/ssr/cli/index.js +0 -200
  205. package/dist/cjs/ssr/index.js +0 -183
  206. package/dist/cjs/ssr/index.node.js +0 -86
  207. package/dist/cjs/ssr/prefetch.js +0 -92
  208. package/dist/cjs/ssr/serverRender/index.js +0 -39
  209. package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +0 -74
  210. package/dist/cjs/ssr/serverRender/renderToStream/index.js +0 -74
  211. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +0 -104
  212. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.worker.js +0 -108
  213. package/dist/cjs/ssr/serverRender/renderToString/buildHtml.js +0 -52
  214. package/dist/cjs/ssr/serverRender/renderToString/entry.js +0 -179
  215. package/dist/cjs/ssr/serverRender/renderToString/render.js +0 -61
  216. package/dist/cjs/ssr/serverRender/tracker.js +0 -113
  217. package/dist/cjs/ssr/utils.js +0 -94
  218. package/dist/esm/ssr/cli/index.js +0 -194
  219. package/dist/esm/ssr/index.js +0 -169
  220. package/dist/esm/ssr/index.node.js +0 -78
  221. package/dist/esm/ssr/serverRender/index.js +0 -55
  222. package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +0 -48
  223. package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.share.js +0 -12
  224. package/dist/esm/ssr/serverRender/renderToStream/index.js +0 -49
  225. package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.worker.js +0 -164
  226. package/dist/esm/ssr/serverRender/renderToStream/template.js +0 -46
  227. package/dist/esm/ssr/serverRender/renderToString/buildHtml.js +0 -34
  228. package/dist/esm/ssr/serverRender/renderToString/entry.js +0 -257
  229. package/dist/esm/ssr/serverRender/renderToString/index.js +0 -34
  230. package/dist/esm/ssr/serverRender/renderToString/render.js +0 -55
  231. package/dist/esm/ssr/serverRender/renderToString/styledComponent.js +0 -25
  232. package/dist/esm/ssr/serverRender/tracker.js +0 -82
  233. package/dist/esm/ssr/serverRender/utils.js +0 -21
  234. package/dist/esm/ssr/utils.js +0 -59
  235. package/dist/esm-node/ssr/cli/index.js +0 -166
  236. package/dist/esm-node/ssr/index.js +0 -147
  237. package/dist/esm-node/ssr/index.node.js +0 -50
  238. package/dist/esm-node/ssr/prefetch.js +0 -72
  239. package/dist/esm-node/ssr/serverRender/index.js +0 -19
  240. package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +0 -50
  241. package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.share.js +0 -8
  242. package/dist/esm-node/ssr/serverRender/renderToStream/index.js +0 -40
  243. package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.worker.js +0 -88
  244. package/dist/esm-node/ssr/serverRender/renderToStream/template.js +0 -19
  245. package/dist/esm-node/ssr/serverRender/renderToString/buildHtml.js +0 -24
  246. package/dist/esm-node/ssr/serverRender/renderToString/entry.js +0 -149
  247. package/dist/esm-node/ssr/serverRender/renderToString/index.js +0 -17
  248. package/dist/esm-node/ssr/serverRender/renderToString/render.js +0 -27
  249. package/dist/esm-node/ssr/serverRender/renderToString/styledComponent.js +0 -20
  250. package/dist/esm-node/ssr/serverRender/tracker.js +0 -87
  251. package/dist/esm-node/ssr/serverRender/utils.js +0 -17
  252. package/dist/esm-node/ssr/utils.js +0 -57
  253. package/dist/types/ssr/index.d.ts +0 -11
  254. package/dist/types/ssr/index.node.d.ts +0 -5
  255. package/dist/types/ssr/prefetch.d.ts +0 -16
  256. package/dist/types/ssr/serverRender/helmet.d.ts +0 -2
  257. package/dist/types/ssr/serverRender/index.d.ts +0 -2
  258. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +0 -7
  259. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.share.d.ts +0 -3
  260. package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +0 -2
  261. package/dist/types/ssr/serverRender/renderToStream/index.d.ts +0 -3
  262. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +0 -7
  263. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.worker.d.ts +0 -12
  264. package/dist/types/ssr/serverRender/renderToStream/template.d.ts +0 -6
  265. package/dist/types/ssr/serverRender/renderToString/buildHtml.d.ts +0 -6
  266. package/dist/types/ssr/serverRender/renderToString/entry.d.ts +0 -24
  267. package/dist/types/ssr/serverRender/renderToString/index.d.ts +0 -2
  268. package/dist/types/ssr/serverRender/renderToString/loadable.d.ts +0 -26
  269. package/dist/types/ssr/serverRender/renderToString/render.d.ts +0 -16
  270. package/dist/types/ssr/serverRender/renderToString/styledComponent.d.ts +0 -15
  271. package/dist/types/ssr/serverRender/tracker.d.ts +0 -20
  272. package/dist/types/ssr/serverRender/types.d.ts +0 -49
  273. package/dist/types/ssr/serverRender/utils.d.ts +0 -9
  274. package/dist/types/ssr/utils.d.ts +0 -10
  275. /package/dist/cjs/{ssr/cli → cli/ssr}/babel-plugin-ssr-loader-id.js +0 -0
  276. /package/dist/cjs/{ssr/cli → cli/ssr}/loadable-bundler-plugin.js +0 -0
  277. /package/dist/cjs/{ssr/react/withCallback/index.js → core/browser/withCallback.js} +0 -0
  278. /package/dist/cjs/{ssr/serverRender → core/server}/constants.js +0 -0
  279. /package/dist/cjs/{ssr → core/server}/react/index.js +0 -0
  280. /package/dist/cjs/{ssr → core/server}/react/nossr/index.js +0 -0
  281. /package/dist/cjs/{ssr → core/server}/react/prerender/index.js +0 -0
  282. /package/dist/cjs/{ssr → core/server}/react/prerender/type.js +0 -0
  283. /package/dist/cjs/{ssr → core/server}/react/prerender/util.js +0 -0
  284. /package/dist/esm/{ssr/react/withCallback/index.js → core/browser/withCallback.js} +0 -0
  285. /package/dist/esm/{ssr/serverRender/types.js → core/constants.js} +0 -0
  286. /package/dist/esm/{ssr/serverRender → core/server}/constants.js +0 -0
  287. /package/dist/esm/{ssr → core/server}/react/index.js +0 -0
  288. /package/dist/esm/{ssr → core/server}/react/nossr/index.js +0 -0
  289. /package/dist/esm/{ssr → core/server}/react/prerender/index.js +0 -0
  290. /package/dist/esm/{ssr → core/server}/react/prerender/util.js +0 -0
  291. /package/dist/esm-node/{ssr/react/withCallback/index.js → core/browser/withCallback.js} +0 -0
  292. /package/dist/esm-node/{ssr/serverRender/types.js → core/constants.js} +0 -0
  293. /package/dist/esm-node/{ssr/serverRender → core/server}/constants.js +0 -0
  294. /package/dist/esm-node/{ssr → core/server}/react/index.js +0 -0
  295. /package/dist/esm-node/{ssr → core/server}/react/nossr/index.js +0 -0
  296. /package/dist/esm-node/{ssr → core/server}/react/prerender/index.js +0 -0
  297. /package/dist/esm-node/{ssr → core/server}/react/prerender/type.js +0 -0
  298. /package/dist/esm-node/{ssr → core/server}/react/prerender/util.js +0 -0
  299. /package/dist/{esm/ssr/react/prerender/type.js → esm-node/core/server/string/types.js} +0 -0
  300. /package/dist/types/{ssr/cli → cli/ssr}/babel-plugin-ssr-loader-id.d.ts +0 -0
  301. /package/dist/types/{ssr/cli → cli/ssr}/index.d.ts +0 -0
  302. /package/dist/types/{ssr/cli → cli/ssr}/loadable-bundler-plugin.d.ts +0 -0
  303. /package/dist/types/{ssr/react/withCallback/index.d.ts → core/browser/withCallback.d.ts} +0 -0
  304. /package/dist/types/{ssr/serverRender → core/server}/constants.d.ts +0 -0
  305. /package/dist/types/{ssr → core/server}/react/index.d.ts +0 -0
  306. /package/dist/types/{ssr → core/server}/react/nossr/index.d.ts +0 -0
  307. /package/dist/types/{ssr → core/server}/react/prerender/index.d.ts +0 -0
  308. /package/dist/types/{ssr → core/server}/react/prerender/type.d.ts +0 -0
  309. /package/dist/types/{ssr → core/server}/react/prerender/util.d.ts +0 -0
@@ -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);
@@ -1,3 +1,4 @@
1
+ import { merge } from "../utils/merge";
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)) {