@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,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
+ };
@@ -0,0 +1,118 @@
1
+ import ReactHelmet from "react-helmet";
2
+ import ReactDomServer from "react-dom/server";
3
+ import React from "react";
4
+ import { time } from "@modern-js/runtime-utils/time";
5
+ import { run } from "@modern-js/runtime-utils/node";
6
+ import { parseHeaders } from "@modern-js/runtime-utils/universal/request";
7
+ import { createReplaceHelemt } from "../helmet";
8
+ import { getSSRConfigByEntry, safeReplace } from "../utils";
9
+ import { CHUNK_CSS_PLACEHOLDER, CHUNK_JS_PLACEHOLDER, HTML_PLACEHOLDER, SSR_DATA_PLACEHOLDER } from "../constants";
10
+ import { buildHtml } from "../shared";
11
+ import { SSRErrors, SSRTimings, createOnError, createOnTiming } from "../tracer";
12
+ import { RenderLevel } from "../../constants";
13
+ import { SSRDataCollector } from "./ssrData";
14
+ import { LoadableCollector } from "./loadable";
15
+ import { StyledCollector } from "./styledComponent";
16
+ import { prefetch } from "./prefetch";
17
+ const renderString = async (request, serverRoot, options) => {
18
+ const headersData = parseHeaders(request);
19
+ return run(headersData, async () => {
20
+ var _runtimeContext_ssrContext;
21
+ const { resource, runtimeContext, config, onError, onTiming, staticGenerate } = options;
22
+ const tracer = {
23
+ onError: createOnError(onError),
24
+ onTiming: createOnTiming(onTiming)
25
+ };
26
+ const routerContext = runtimeContext.routerContext;
27
+ const { htmlTemplate, entryName, loadableStats, routeManifest } = resource;
28
+ const ssrConfig = getSSRConfigByEntry(entryName, config.ssr, config.ssrByEntries, staticGenerate);
29
+ const chunkSet = {
30
+ renderLevel: RenderLevel.CLIENT_RENDER,
31
+ ssrScripts: "",
32
+ jsChunk: "",
33
+ cssChunk: ""
34
+ };
35
+ let prefetchData = {};
36
+ try {
37
+ prefetchData = await prefetch(serverRoot, request, options, ssrConfig, tracer);
38
+ chunkSet.renderLevel = RenderLevel.SERVER_PREFETCH;
39
+ } catch (e) {
40
+ chunkSet.renderLevel = RenderLevel.CLIENT_RENDER;
41
+ }
42
+ const collectors = [
43
+ new StyledCollector(chunkSet),
44
+ new LoadableCollector({
45
+ stats: loadableStats,
46
+ nonce: config.nonce,
47
+ routeManifest,
48
+ template: htmlTemplate,
49
+ entryName,
50
+ chunkSet,
51
+ config
52
+ }),
53
+ new SSRDataCollector({
54
+ request,
55
+ prefetchData,
56
+ ssrConfig,
57
+ ssrContext: runtimeContext.ssrContext,
58
+ chunkSet,
59
+ routerContext,
60
+ nonce: config.nonce
61
+ })
62
+ ];
63
+ const rootElement = React.cloneElement(serverRoot, {
64
+ _internal_context: Object.assign(runtimeContext, {
65
+ ssr: true
66
+ })
67
+ });
68
+ const html = await generateHtml(rootElement, htmlTemplate, chunkSet, collectors, ((_runtimeContext_ssrContext = runtimeContext.ssrContext) === null || _runtimeContext_ssrContext === void 0 ? void 0 : _runtimeContext_ssrContext.htmlModifiers) || [], tracer);
69
+ return html;
70
+ });
71
+ };
72
+ async function generateHtml(App, htmlTemplate, chunkSet, collectors, htmlModifiers, { onError, onTiming }) {
73
+ const end = time();
74
+ let html = "";
75
+ let helmetData;
76
+ if (chunkSet.renderLevel >= RenderLevel.SERVER_PREFETCH) {
77
+ try {
78
+ const finalApp = collectors.reduce((pre, creator) => {
79
+ var _creator_collect;
80
+ return ((_creator_collect = creator.collect) === null || _creator_collect === void 0 ? void 0 : _creator_collect.call(creator, pre)) || pre;
81
+ }, App);
82
+ html = ReactDomServer.renderToString(finalApp);
83
+ helmetData = ReactHelmet.renderStatic();
84
+ chunkSet.renderLevel = RenderLevel.SERVER_RENDER;
85
+ await Promise.all(collectors.map((component) => component.effect()));
86
+ const cost = end();
87
+ onTiming(SSRTimings.RENDER_HTML, cost);
88
+ } catch (e) {
89
+ chunkSet.renderLevel = RenderLevel.CLIENT_RENDER;
90
+ onError(SSRErrors.RENDER_HTML, e);
91
+ }
92
+ }
93
+ const { ssrScripts, cssChunk, jsChunk } = chunkSet;
94
+ const finalHtml = await buildHtml(htmlTemplate, [
95
+ createReplaceHtml(html),
96
+ createReplaceChunkJs(jsChunk),
97
+ createReplaceChunkCss(cssChunk),
98
+ createReplaceSSRDataScript(ssrScripts),
99
+ createReplaceHelemt(helmetData),
100
+ ...htmlModifiers
101
+ ]);
102
+ return finalHtml;
103
+ }
104
+ function createReplaceHtml(html) {
105
+ return (template) => safeReplace(template, HTML_PLACEHOLDER, html);
106
+ }
107
+ function createReplaceSSRDataScript(data) {
108
+ return (template) => safeReplace(template, SSR_DATA_PLACEHOLDER, data);
109
+ }
110
+ function createReplaceChunkJs(js) {
111
+ return (template) => safeReplace(template, CHUNK_JS_PLACEHOLDER, js);
112
+ }
113
+ function createReplaceChunkCss(css) {
114
+ return (template) => safeReplace(template, CHUNK_CSS_PLACEHOLDER, css);
115
+ }
116
+ export {
117
+ renderString
118
+ };
@@ -61,13 +61,12 @@ class LoadableCollector {
61
61
  if (!check(scripts)) {
62
62
  return;
63
63
  }
64
- const { result: { chunksMap } } = this.options;
64
+ const { chunkSet } = this.options;
65
65
  const s = scripts.split("</script>").slice(0, 2).map((i) => `${i}</script>`).join("");
66
- chunksMap.js += s;
66
+ chunkSet.jsChunk += s;
67
67
  }
68
68
  async emitScriptAssets(chunks) {
69
- const { template, config, nonce, result } = this.options;
70
- const { chunksMap } = result;
69
+ const { template, nonce, chunkSet, config } = this.options;
71
70
  const { scriptLoading = "defer", enableInlineScripts } = config;
72
71
  const scriptLoadingAtr = {
73
72
  defer: scriptLoading === "defer" ? true : void 0,
@@ -92,10 +91,11 @@ class LoadableCollector {
92
91
  return script;
93
92
  }
94
93
  }));
95
- chunksMap.js += scripts.filter((script) => Boolean(script)).join("");
94
+ chunkSet.jsChunk += scripts.filter((script) => Boolean(script)).join("");
96
95
  }
97
96
  async emitStyleAssets(chunks) {
98
- const { template, result: { chunksMap }, config: { enableInlineStyles } } = this.options;
97
+ const { template, chunkSet, config } = this.options;
98
+ const { enableInlineStyles } = config;
99
99
  const atrributes = attributesToString(this.generateAttributes());
100
100
  const css = await Promise.all(chunks.filter((chunk) => {
101
101
  var _this_existsAssets;
@@ -111,7 +111,7 @@ class LoadableCollector {
111
111
  return link;
112
112
  }
113
113
  }));
114
- chunksMap.css += css.filter((css2) => Boolean(css2)).join("");
114
+ chunkSet.jsChunk += css.filter((css2) => Boolean(css2)).join("");
115
115
  }
116
116
  generateAttributes(extraAtr = {}) {
117
117
  const { config } = this.options;
@@ -129,9 +129,6 @@ class LoadableCollector {
129
129
  this.options = options;
130
130
  }
131
131
  }
132
- function createLoadableCollector(options) {
133
- return new LoadableCollector(options);
134
- }
135
132
  export {
136
- createLoadableCollector
133
+ LoadableCollector
137
134
  };
@@ -0,0 +1,78 @@
1
+ import { renderToStaticMarkup } from "react-dom/server";
2
+ import { run } from "@modern-js/runtime-utils/node";
3
+ import { ChunkExtractor } from "@loadable/server";
4
+ import { time } from "@modern-js/runtime-utils/time";
5
+ import { parseHeaders } from "@modern-js/runtime-utils/universal/request";
6
+ import React from "react";
7
+ import { SSRErrors, SSRTimings } from "../tracer";
8
+ const prefetch = async (App, request, options, ssrConfig, { onError, onTiming }) => {
9
+ const headersData = parseHeaders(request);
10
+ const { runtimeContext: context, resource } = options;
11
+ const { entryName, loadableStats } = resource;
12
+ return run(headersData, async () => {
13
+ var _context_store;
14
+ if (typeof ssrConfig === "boolean" || !ssrConfig.disablePrerender) {
15
+ try {
16
+ const end = time();
17
+ if (loadableStats) {
18
+ const extractor = new ChunkExtractor({
19
+ stats: loadableStats,
20
+ entrypoints: [
21
+ entryName
22
+ ].filter(Boolean)
23
+ });
24
+ renderToStaticMarkup(extractor.collectChunks(/* @__PURE__ */ React.cloneElement(App, {
25
+ _internal_context: Object.assign(context, {
26
+ ssr: false
27
+ })
28
+ })));
29
+ } else {
30
+ renderToStaticMarkup(/* @__PURE__ */ React.cloneElement(App, {
31
+ _internal_context: Object.assign(context, {
32
+ ssr: false
33
+ })
34
+ }));
35
+ }
36
+ const cost = end();
37
+ onTiming(SSRTimings.PRERENDER, cost);
38
+ } catch (e) {
39
+ const error = e;
40
+ onError(SSRErrors.PRERENDER, error);
41
+ throw e;
42
+ }
43
+ }
44
+ if (!context.loaderManager.hasPendingLoaders()) {
45
+ return {
46
+ initialData: context.initialData,
47
+ i18nData: context.__i18nData__
48
+ };
49
+ }
50
+ let loadersData = {};
51
+ try {
52
+ const end = time();
53
+ loadersData = await context.loaderManager.awaitPendingLoaders();
54
+ const cost = end();
55
+ onTiming(SSRTimings.USE_LOADER, cost);
56
+ } catch (e) {
57
+ onError(SSRErrors.USE_LOADER, e);
58
+ throw e;
59
+ }
60
+ Object.keys(loadersData).forEach((id) => {
61
+ const data = loadersData[id];
62
+ if (data._error) {
63
+ onError(SSRErrors.USE_LOADER, data._error);
64
+ delete data._error;
65
+ }
66
+ });
67
+ return {
68
+ loadersData,
69
+ initialData: context.initialData,
70
+ i18nData: context.__i18nData__,
71
+ // todo: move to plugin state
72
+ storeState: context === null || context === void 0 ? void 0 : (_context_store = context.store) === null || _context_store === void 0 ? void 0 : _context_store.getState()
73
+ };
74
+ });
75
+ };
76
+ export {
77
+ prefetch
78
+ };
@@ -0,0 +1,76 @@
1
+ import { _ as _class_private_field_get } from "@swc/helpers/_/_class_private_field_get";
2
+ import { _ as _class_private_field_init } from "@swc/helpers/_/_class_private_field_init";
3
+ import { _ as _class_private_field_set } from "@swc/helpers/_/_class_private_field_set";
4
+ import { _ as _class_private_method_get } from "@swc/helpers/_/_class_private_method_get";
5
+ import { _ as _class_private_method_init } from "@swc/helpers/_/_class_private_method_init";
6
+ import { serializeJson } from "@modern-js/runtime-utils/node";
7
+ import { attributesToString, serializeErrors } from "../utils";
8
+ import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "../constants";
9
+ var _options = /* @__PURE__ */ new WeakMap(), _getSSRData = /* @__PURE__ */ new WeakSet(), _getSSRDataScripts = /* @__PURE__ */ new WeakSet();
10
+ class SSRDataCollector {
11
+ effect() {
12
+ const { routerContext, chunkSet } = _class_private_field_get(this, _options);
13
+ const ssrData = _class_private_method_get(this, _getSSRData, getSSRData).call(this);
14
+ const routerData = routerContext ? {
15
+ loaderData: routerContext.loaderData,
16
+ errors: serializeErrors(routerContext.errors)
17
+ } : void 0;
18
+ const ssrDataScripts = _class_private_method_get(this, _getSSRDataScripts, getSSRDataScripts).call(this, ssrData, routerData);
19
+ chunkSet.ssrScripts = ssrDataScripts;
20
+ }
21
+ constructor(options) {
22
+ _class_private_method_init(this, _getSSRData);
23
+ _class_private_method_init(this, _getSSRDataScripts);
24
+ _class_private_field_init(this, _options, {
25
+ writable: true,
26
+ value: void 0
27
+ });
28
+ _class_private_field_set(this, _options, options);
29
+ }
30
+ }
31
+ function getSSRData() {
32
+ const { prefetchData, chunkSet, ssrConfig, ssrContext } = _class_private_field_get(this, _options);
33
+ const { reporter, request } = ssrContext;
34
+ const headers = typeof ssrConfig === "object" && ssrConfig.unsafeHeaders ? Object.fromEntries(Object.entries(request.headers).filter(([key, _]) => {
35
+ var _ssrConfig_unsafeHeaders_map, _ssrConfig_unsafeHeaders;
36
+ 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());
37
+ })) : void 0;
38
+ return {
39
+ data: prefetchData,
40
+ context: {
41
+ request: {
42
+ params: request.params,
43
+ query: request.query,
44
+ pathname: request.pathname,
45
+ host: request.host,
46
+ url: request.raw.url,
47
+ headers
48
+ },
49
+ reporter: {
50
+ sessionId: reporter === null || reporter === void 0 ? void 0 : reporter.sessionId
51
+ }
52
+ },
53
+ mode: "string",
54
+ renderLevel: chunkSet.renderLevel
55
+ };
56
+ }
57
+ function getSSRDataScripts(ssrData, routerData) {
58
+ const { nonce, ssrConfig } = _class_private_field_get(this, _options);
59
+ const inlineScript = typeof ssrConfig === "boolean" ? true : (ssrConfig === null || ssrConfig === void 0 ? void 0 : ssrConfig.inlineScript) !== false;
60
+ const useInlineScript = inlineScript !== false;
61
+ const serializeSSRData = serializeJson(ssrData);
62
+ const attrsStr = attributesToString({
63
+ nonce
64
+ });
65
+ let ssrDataScripts = useInlineScript ? `<script${attrsStr}>window._SSR_DATA = ${serializeSSRData}</script>` : `<script type="application/json" id="${SSR_DATA_JSON_ID}">${serializeSSRData}</script>`;
66
+ if (routerData) {
67
+ const serializedRouterData = serializeJson(routerData);
68
+ ssrDataScripts += useInlineScript ? `
69
+ <script${attrsStr}>window._ROUTER_DATA = ${serializedRouterData}</script>` : `
70
+ <script type="application/json" id="${ROUTER_DATA_JSON_ID}">${serializedRouterData}</script>`;
71
+ }
72
+ return ssrDataScripts;
73
+ }
74
+ export {
75
+ SSRDataCollector
76
+ };
@@ -0,0 +1,29 @@
1
+ import { _ as _class_private_field_get } from "@swc/helpers/_/_class_private_field_get";
2
+ import { _ as _class_private_field_init } from "@swc/helpers/_/_class_private_field_init";
3
+ import { _ as _class_private_field_set } from "@swc/helpers/_/_class_private_field_set";
4
+ import { ServerStyleSheet } from "styled-components";
5
+ var _sheet = /* @__PURE__ */ new WeakMap(), _chunkSet = /* @__PURE__ */ new WeakMap();
6
+ class StyledCollector {
7
+ collect(comopnent) {
8
+ return _class_private_field_get(this, _sheet).collectStyles(comopnent);
9
+ }
10
+ effect() {
11
+ const css = _class_private_field_get(this, _sheet).getStyleTags();
12
+ _class_private_field_get(this, _chunkSet).cssChunk += css;
13
+ }
14
+ constructor(chunkSet) {
15
+ _class_private_field_init(this, _sheet, {
16
+ writable: true,
17
+ value: void 0
18
+ });
19
+ _class_private_field_init(this, _chunkSet, {
20
+ writable: true,
21
+ value: void 0
22
+ });
23
+ _class_private_field_set(this, _sheet, new ServerStyleSheet());
24
+ _class_private_field_set(this, _chunkSet, chunkSet);
25
+ }
26
+ }
27
+ export {
28
+ StyledCollector
29
+ };
@@ -0,0 +1,33 @@
1
+ var SSRTimings;
2
+ (function(SSRTimings2) {
3
+ SSRTimings2["PRERENDER"] = "ssr-prerender";
4
+ SSRTimings2["RENDER_HTML"] = "ssr-render-html";
5
+ SSRTimings2["RENDER_SHELL"] = "ssr-render-shell";
6
+ SSRTimings2["USE_LOADER"] = "use-loader";
7
+ })(SSRTimings || (SSRTimings = {}));
8
+ var SSRErrors;
9
+ (function(SSRErrors2) {
10
+ SSRErrors2["PRERENDER"] = "App Prerender";
11
+ SSRErrors2["USE_LOADER"] = "App run useLoader";
12
+ SSRErrors2["RENDER_HTML"] = "App Render To HTML";
13
+ SSRErrors2["RENDER_STREAM"] = "An error occurs during streaming SSR";
14
+ SSRErrors2["RENDER_SHELL"] = "An error occurs during streaming render shell";
15
+ })(SSRErrors || (SSRErrors = {}));
16
+ function createOnError(onError) {
17
+ return (key, e) => {
18
+ const error = e instanceof Error ? e : new Error("Unexpected Server Error");
19
+ error.name = key;
20
+ onError === null || onError === void 0 ? void 0 : onError(e);
21
+ };
22
+ }
23
+ function createOnTiming(onTiming) {
24
+ return (key, cost) => {
25
+ onTiming === null || onTiming === void 0 ? void 0 : onTiming(key, cost);
26
+ };
27
+ }
28
+ export {
29
+ SSRErrors,
30
+ SSRTimings,
31
+ createOnError,
32
+ createOnTiming
33
+ };