@modern-js/runtime 2.22.0 → 2.22.2-alpha.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 (286) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cjs/document/Html.js +2 -1
  3. package/dist/cjs/document/Style.js +26 -0
  4. package/dist/cjs/document/cli/index.js +3 -0
  5. package/dist/cjs/document/constants.js +11 -6
  6. package/dist/cjs/document/index.js +1 -0
  7. package/dist/cjs/router/runtime/DeferredDataScripts.node.js +9 -4
  8. package/dist/cjs/router/runtime/plugin.js +16 -1
  9. package/dist/cjs/router/runtime/plugin.node.js +5 -2
  10. package/dist/esm/document/Html.js +8 -3
  11. package/dist/esm/document/Style.js +14 -0
  12. package/dist/esm/document/cli/index.js +6 -1
  13. package/dist/esm/document/constants.js +3 -1
  14. package/dist/esm/document/index.js +1 -0
  15. package/dist/esm/router/runtime/DeferredDataScripts.node.js +9 -4
  16. package/dist/esm/router/runtime/plugin.js +20 -1
  17. package/dist/esm/router/runtime/plugin.node.js +6 -3
  18. package/dist/esm-node/document/Html.js +2 -1
  19. package/dist/esm-node/document/Style.js +14 -0
  20. package/dist/esm-node/document/cli/index.js +4 -1
  21. package/dist/esm-node/document/constants.js +3 -1
  22. package/dist/esm-node/document/index.js +1 -0
  23. package/dist/esm-node/router/runtime/DeferredDataScripts.node.js +9 -4
  24. package/dist/esm-node/router/runtime/plugin.js +16 -1
  25. package/dist/esm-node/router/runtime/plugin.node.js +5 -2
  26. package/dist/js/modern/cli/index.js +72 -0
  27. package/dist/js/modern/common.js +4 -0
  28. package/dist/js/modern/config.js +0 -0
  29. package/dist/js/modern/core/app-config.js +10 -0
  30. package/dist/js/modern/core/compatible.js +286 -0
  31. package/dist/js/modern/core/index.js +16 -0
  32. package/dist/js/modern/core/loader/index.js +4 -0
  33. package/dist/js/modern/core/loader/loaderManager.js +165 -0
  34. package/dist/js/modern/core/loader/useLoader.js +114 -0
  35. package/dist/js/modern/core/plugin.js +58 -0
  36. package/dist/js/modern/document/Body.js +23 -0
  37. package/dist/js/modern/document/DocumentContext.js +9 -0
  38. package/dist/js/modern/document/DocumentStructureContext.js +11 -0
  39. package/dist/js/modern/document/Head.js +27 -0
  40. package/dist/js/modern/document/Html.js +78 -0
  41. package/dist/js/modern/document/Links.js +10 -0
  42. package/dist/js/modern/document/Root.js +33 -0
  43. package/dist/js/modern/document/Script.js +20 -0
  44. package/dist/js/modern/document/Scripts.js +10 -0
  45. package/dist/js/modern/document/cli/index.js +228 -0
  46. package/dist/js/modern/document/constants.js +49 -0
  47. package/dist/js/modern/document/index.js +10 -0
  48. package/dist/js/modern/exports/head.js +6 -0
  49. package/dist/js/modern/exports/loadable.js +6 -0
  50. package/dist/js/modern/exports/server.js +4 -0
  51. package/dist/js/modern/exports/styled.js +6 -0
  52. package/dist/js/modern/index.js +22 -0
  53. package/dist/js/modern/router/cli/index.js +120 -0
  54. package/dist/js/modern/router/index.js +7 -0
  55. package/dist/js/modern/router/runtime/DefaultNotFound.js +14 -0
  56. package/dist/js/modern/router/runtime/fetch.js +5 -0
  57. package/dist/js/modern/router/runtime/fetch.node.js +4 -0
  58. package/dist/js/modern/router/runtime/fetch.worker.js +5 -0
  59. package/dist/js/modern/router/runtime/index.js +9 -0
  60. package/dist/js/modern/router/runtime/plugin.js +104 -0
  61. package/dist/js/modern/router/runtime/plugin.node.js +189 -0
  62. package/dist/js/modern/router/runtime/server.js +1 -0
  63. package/dist/js/modern/router/runtime/types.js +0 -0
  64. package/dist/js/modern/router/runtime/utils.js +196 -0
  65. package/dist/js/modern/router/runtime/withRouter.js +36 -0
  66. package/dist/js/modern/runtime-context.js +7 -0
  67. package/dist/js/modern/ssr/cli/babel-plugin-ssr-loader-id.js +130 -0
  68. package/dist/js/modern/ssr/cli/index.js +172 -0
  69. package/dist/js/modern/ssr/index.js +159 -0
  70. package/dist/js/modern/ssr/index.node.js +79 -0
  71. package/dist/js/modern/ssr/prefetch.js +69 -0
  72. package/dist/js/modern/ssr/prefetch.worker.js +66 -0
  73. package/dist/js/modern/ssr/react/index.js +6 -0
  74. package/dist/js/modern/ssr/react/nossr/index.js +18 -0
  75. package/dist/js/modern/ssr/react/prerender/index.js +108 -0
  76. package/dist/js/modern/ssr/react/prerender/type.js +0 -0
  77. package/dist/js/modern/ssr/react/prerender/util.js +96 -0
  78. package/dist/js/modern/ssr/react/withCallback/index.js +15 -0
  79. package/dist/js/modern/ssr/serverRender/helmet.js +44 -0
  80. package/dist/js/modern/ssr/serverRender/index.js +35 -0
  81. package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.after.js +36 -0
  82. package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.share.js +11 -0
  83. package/dist/js/modern/ssr/serverRender/renderToStream/bulidTemplate.before.js +61 -0
  84. package/dist/js/modern/ssr/serverRender/renderToStream/index.js +58 -0
  85. package/dist/js/modern/ssr/serverRender/renderToStream/index.worker.js +35 -0
  86. package/dist/js/modern/ssr/serverRender/renderToStream/loadable.js +24 -0
  87. package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.js +96 -0
  88. package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.worker.js +117 -0
  89. package/dist/js/modern/ssr/serverRender/renderToStream/styledComponent.js +12 -0
  90. package/dist/js/modern/ssr/serverRender/renderToStream/template.js +22 -0
  91. package/dist/js/modern/ssr/serverRender/renderToStream/type.js +0 -0
  92. package/dist/js/modern/ssr/serverRender/renderToString/entry.js +172 -0
  93. package/dist/js/modern/ssr/serverRender/renderToString/index.js +52 -0
  94. package/dist/js/modern/ssr/serverRender/renderToString/index.worker.js +49 -0
  95. package/dist/js/modern/ssr/serverRender/renderToString/loadable.js +48 -0
  96. package/dist/js/modern/ssr/serverRender/renderToString/reduce.js +8 -0
  97. package/dist/js/modern/ssr/serverRender/renderToString/styledComponent.js +11 -0
  98. package/dist/js/modern/ssr/serverRender/renderToString/template.js +58 -0
  99. package/dist/js/modern/ssr/serverRender/renderToString/type.js +9 -0
  100. package/dist/js/modern/ssr/serverRender/time.js +13 -0
  101. package/dist/js/modern/ssr/serverRender/time.worker.js +28 -0
  102. package/dist/js/modern/ssr/serverRender/types.js +4 -0
  103. package/dist/js/modern/ssr/serverRender/utils.js +11 -0
  104. package/dist/js/modern/ssr/utils.js +81 -0
  105. package/dist/js/modern/state/cli/index.js +83 -0
  106. package/dist/js/modern/state/index.js +7 -0
  107. package/dist/js/modern/state/plugins.js +13 -0
  108. package/dist/js/modern/state/runtime/index.js +9 -0
  109. package/dist/js/modern/state/runtime/plugin.js +97 -0
  110. package/dist/js/modern/state/types.js +0 -0
  111. package/dist/js/node/cli/index.js +99 -0
  112. package/dist/js/node/common.js +27 -0
  113. package/dist/js/node/config.js +15 -0
  114. package/dist/js/node/core/app-config.js +34 -0
  115. package/dist/js/node/core/compatible.js +313 -0
  116. package/dist/js/node/core/index.js +47 -0
  117. package/dist/js/node/core/loader/index.js +33 -0
  118. package/dist/js/node/core/loader/loaderManager.js +195 -0
  119. package/dist/js/node/core/loader/useLoader.js +132 -0
  120. package/dist/js/node/core/plugin.js +80 -0
  121. package/dist/js/node/document/Body.js +43 -0
  122. package/dist/js/node/document/DocumentContext.js +38 -0
  123. package/dist/js/node/document/DocumentStructureContext.js +40 -0
  124. package/dist/js/node/document/Head.js +51 -0
  125. package/dist/js/node/document/Html.js +101 -0
  126. package/dist/js/node/document/Links.js +33 -0
  127. package/dist/js/node/document/Root.js +57 -0
  128. package/dist/js/node/document/Script.js +40 -0
  129. package/dist/js/node/document/Scripts.js +33 -0
  130. package/dist/js/node/document/cli/index.js +240 -0
  131. package/dist/js/node/document/constants.js +86 -0
  132. package/dist/js/node/document/index.js +26 -0
  133. package/dist/js/node/exports/head.js +34 -0
  134. package/dist/js/node/exports/loadable.js +34 -0
  135. package/dist/js/node/exports/server.js +27 -0
  136. package/dist/js/node/exports/styled.js +34 -0
  137. package/dist/js/node/index.js +44 -0
  138. package/dist/js/node/router/cli/index.js +135 -0
  139. package/dist/js/node/router/index.js +37 -0
  140. package/dist/js/node/router/runtime/DefaultNotFound.js +37 -0
  141. package/dist/js/node/router/runtime/fetch.js +28 -0
  142. package/dist/js/node/router/runtime/fetch.node.js +27 -0
  143. package/dist/js/node/router/runtime/fetch.worker.js +28 -0
  144. package/dist/js/node/router/runtime/index.js +33 -0
  145. package/dist/js/node/router/runtime/plugin.js +127 -0
  146. package/dist/js/node/router/runtime/plugin.node.js +212 -0
  147. package/dist/js/node/router/runtime/server.js +17 -0
  148. package/dist/js/node/router/runtime/types.js +15 -0
  149. package/dist/js/node/router/runtime/utils.js +221 -0
  150. package/dist/js/node/router/runtime/withRouter.js +57 -0
  151. package/dist/js/node/runtime-context.js +31 -0
  152. package/dist/js/node/ssr/cli/babel-plugin-ssr-loader-id.js +139 -0
  153. package/dist/js/node/ssr/cli/index.js +190 -0
  154. package/dist/js/node/ssr/index.js +185 -0
  155. package/dist/js/node/ssr/index.node.js +107 -0
  156. package/dist/js/node/ssr/prefetch.js +90 -0
  157. package/dist/js/node/ssr/prefetch.worker.js +87 -0
  158. package/dist/js/node/ssr/react/index.js +30 -0
  159. package/dist/js/node/ssr/react/nossr/index.js +47 -0
  160. package/dist/js/node/ssr/react/prerender/index.js +130 -0
  161. package/dist/js/node/ssr/react/prerender/type.js +15 -0
  162. package/dist/js/node/ssr/react/prerender/util.js +123 -0
  163. package/dist/js/node/ssr/react/withCallback/index.js +38 -0
  164. package/dist/js/node/ssr/serverRender/helmet.js +65 -0
  165. package/dist/js/node/ssr/serverRender/index.js +56 -0
  166. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.after.js +65 -0
  167. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.share.js +35 -0
  168. package/dist/js/node/ssr/serverRender/renderToStream/bulidTemplate.before.js +87 -0
  169. package/dist/js/node/ssr/serverRender/renderToStream/index.js +87 -0
  170. package/dist/js/node/ssr/serverRender/renderToStream/index.worker.js +64 -0
  171. package/dist/js/node/ssr/serverRender/renderToStream/loadable.js +47 -0
  172. package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.js +115 -0
  173. package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.worker.js +136 -0
  174. package/dist/js/node/ssr/serverRender/renderToStream/styledComponent.js +35 -0
  175. package/dist/js/node/ssr/serverRender/renderToStream/template.js +45 -0
  176. package/dist/js/node/ssr/serverRender/renderToStream/type.js +15 -0
  177. package/dist/js/node/ssr/serverRender/renderToString/entry.js +197 -0
  178. package/dist/js/node/ssr/serverRender/renderToString/index.js +81 -0
  179. package/dist/js/node/ssr/serverRender/renderToString/index.worker.js +78 -0
  180. package/dist/js/node/ssr/serverRender/renderToString/loadable.js +71 -0
  181. package/dist/js/node/ssr/serverRender/renderToString/reduce.js +31 -0
  182. package/dist/js/node/ssr/serverRender/renderToString/styledComponent.js +34 -0
  183. package/dist/js/node/ssr/serverRender/renderToString/template.js +82 -0
  184. package/dist/js/node/ssr/serverRender/renderToString/type.js +32 -0
  185. package/dist/js/node/ssr/serverRender/time.js +36 -0
  186. package/dist/js/node/ssr/serverRender/time.worker.js +51 -0
  187. package/dist/js/node/ssr/serverRender/types.js +27 -0
  188. package/dist/js/node/ssr/serverRender/utils.js +34 -0
  189. package/dist/js/node/ssr/utils.js +106 -0
  190. package/dist/js/node/state/cli/index.js +100 -0
  191. package/dist/js/node/state/index.js +37 -0
  192. package/dist/js/node/state/plugins.js +45 -0
  193. package/dist/js/node/state/runtime/index.js +40 -0
  194. package/dist/js/node/state/runtime/plugin.js +121 -0
  195. package/dist/js/node/state/types.js +15 -0
  196. package/dist/js/treeshaking/cli/index.js +186 -0
  197. package/dist/js/treeshaking/common.js +4 -0
  198. package/dist/js/treeshaking/config.js +1 -0
  199. package/dist/js/treeshaking/core/app-config.js +9 -0
  200. package/dist/js/treeshaking/core/compatible.js +486 -0
  201. package/dist/js/treeshaking/core/index.js +7 -0
  202. package/dist/js/treeshaking/core/loader/index.js +2 -0
  203. package/dist/js/treeshaking/core/loader/loaderManager.js +406 -0
  204. package/dist/js/treeshaking/core/loader/useLoader.js +188 -0
  205. package/dist/js/treeshaking/core/plugin.js +176 -0
  206. package/dist/js/treeshaking/document/Body.js +18 -0
  207. package/dist/js/treeshaking/document/DocumentContext.js +7 -0
  208. package/dist/js/treeshaking/document/DocumentStructureContext.js +9 -0
  209. package/dist/js/treeshaking/document/Head.js +24 -0
  210. package/dist/js/treeshaking/document/Html.js +99 -0
  211. package/dist/js/treeshaking/document/Links.js +8 -0
  212. package/dist/js/treeshaking/document/Root.js +26 -0
  213. package/dist/js/treeshaking/document/Script.js +15 -0
  214. package/dist/js/treeshaking/document/Scripts.js +8 -0
  215. package/dist/js/treeshaking/document/cli/index.js +393 -0
  216. package/dist/js/treeshaking/document/constants.js +35 -0
  217. package/dist/js/treeshaking/document/index.js +10 -0
  218. package/dist/js/treeshaking/exports/head.js +4 -0
  219. package/dist/js/treeshaking/exports/loadable.js +4 -0
  220. package/dist/js/treeshaking/exports/server.js +4 -0
  221. package/dist/js/treeshaking/exports/styled.js +4 -0
  222. package/dist/js/treeshaking/index.js +3 -0
  223. package/dist/js/treeshaking/router/cli/index.js +148 -0
  224. package/dist/js/treeshaking/router/index.js +4 -0
  225. package/dist/js/treeshaking/router/runtime/DefaultNotFound.js +14 -0
  226. package/dist/js/treeshaking/router/runtime/fetch.js +2 -0
  227. package/dist/js/treeshaking/router/runtime/fetch.node.js +2 -0
  228. package/dist/js/treeshaking/router/runtime/fetch.worker.js +2 -0
  229. package/dist/js/treeshaking/router/runtime/index.js +6 -0
  230. package/dist/js/treeshaking/router/runtime/plugin.js +132 -0
  231. package/dist/js/treeshaking/router/runtime/plugin.node.js +447 -0
  232. package/dist/js/treeshaking/router/runtime/server.js +1 -0
  233. package/dist/js/treeshaking/router/runtime/types.js +1 -0
  234. package/dist/js/treeshaking/router/runtime/utils.js +260 -0
  235. package/dist/js/treeshaking/router/runtime/withRouter.js +67 -0
  236. package/dist/js/treeshaking/runtime-context.js +4 -0
  237. package/dist/js/treeshaking/ssr/cli/babel-plugin-ssr-loader-id.js +122 -0
  238. package/dist/js/treeshaking/ssr/cli/index.js +217 -0
  239. package/dist/js/treeshaking/ssr/index.js +315 -0
  240. package/dist/js/treeshaking/ssr/index.node.js +240 -0
  241. package/dist/js/treeshaking/ssr/prefetch.js +199 -0
  242. package/dist/js/treeshaking/ssr/prefetch.worker.js +191 -0
  243. package/dist/js/treeshaking/ssr/react/index.js +3 -0
  244. package/dist/js/treeshaking/ssr/react/nossr/index.js +58 -0
  245. package/dist/js/treeshaking/ssr/react/prerender/index.js +237 -0
  246. package/dist/js/treeshaking/ssr/react/prerender/type.js +1 -0
  247. package/dist/js/treeshaking/ssr/react/prerender/util.js +108 -0
  248. package/dist/js/treeshaking/ssr/react/withCallback/index.js +16 -0
  249. package/dist/js/treeshaking/ssr/serverRender/helmet.js +42 -0
  250. package/dist/js/treeshaking/ssr/serverRender/index.js +169 -0
  251. package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.after.js +34 -0
  252. package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.share.js +7 -0
  253. package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +115 -0
  254. package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +165 -0
  255. package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.worker.js +32 -0
  256. package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +22 -0
  257. package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +122 -0
  258. package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.worker.js +294 -0
  259. package/dist/js/treeshaking/ssr/serverRender/renderToStream/styledComponent.js +11 -0
  260. package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +63 -0
  261. package/dist/js/treeshaking/ssr/serverRender/renderToStream/type.js +1 -0
  262. package/dist/js/treeshaking/ssr/serverRender/renderToString/entry.js +393 -0
  263. package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +165 -0
  264. package/dist/js/treeshaking/ssr/serverRender/renderToString/index.worker.js +167 -0
  265. package/dist/js/treeshaking/ssr/serverRender/renderToString/loadable.js +56 -0
  266. package/dist/js/treeshaking/ssr/serverRender/renderToString/reduce.js +10 -0
  267. package/dist/js/treeshaking/ssr/serverRender/renderToString/styledComponent.js +9 -0
  268. package/dist/js/treeshaking/ssr/serverRender/renderToString/template.js +156 -0
  269. package/dist/js/treeshaking/ssr/serverRender/renderToString/type.js +7 -0
  270. package/dist/js/treeshaking/ssr/serverRender/time.js +57 -0
  271. package/dist/js/treeshaking/ssr/serverRender/time.worker.js +75 -0
  272. package/dist/js/treeshaking/ssr/serverRender/types.js +2 -0
  273. package/dist/js/treeshaking/ssr/serverRender/utils.js +13 -0
  274. package/dist/js/treeshaking/ssr/utils.js +134 -0
  275. package/dist/js/treeshaking/state/cli/index.js +71 -0
  276. package/dist/js/treeshaking/state/index.js +4 -0
  277. package/dist/js/treeshaking/state/plugins.js +14 -0
  278. package/dist/js/treeshaking/state/runtime/index.js +5 -0
  279. package/dist/js/treeshaking/state/runtime/plugin.js +198 -0
  280. package/dist/js/treeshaking/state/types.js +1 -0
  281. package/dist/types/document/Style.d.ts +5 -0
  282. package/dist/types/document/constants.d.ts +2 -1
  283. package/dist/types/document/index.d.ts +1 -0
  284. package/dist/types/router/runtime/DeferredDataScripts.node.d.ts +3 -1
  285. package/dist/types/runtimeContext.d.ts +8 -0
  286. package/package.json +11 -10
@@ -0,0 +1,96 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import { Transform } from "stream";
21
+ import { RenderLevel } from "../types";
22
+ import { getTemplates } from "./template";
23
+ function renderToPipe(rootElement, context, options) {
24
+ let isShellStream = true;
25
+ const { ssrContext } = context;
26
+ const forUserPipe = (stream) => {
27
+ return new Promise((resolve) => {
28
+ let renderToPipeableStream;
29
+ try {
30
+ ({ renderToPipeableStream } = require("react-dom/server"));
31
+ } catch (e) {
32
+ }
33
+ const { pipe } = renderToPipeableStream(rootElement, __spreadProps(__spreadValues({}, options), {
34
+ onShellReady() {
35
+ var _a;
36
+ const { shellAfter, shellBefore } = getTemplates(
37
+ context,
38
+ RenderLevel.SERVER_RENDER
39
+ );
40
+ (_a = options == null ? void 0 : options.onShellReady) == null ? void 0 : _a.call(options);
41
+ const injectableTransform = new Transform({
42
+ transform(chunk, _encoding, callback) {
43
+ try {
44
+ if (isShellStream) {
45
+ this.push(joinChunk(shellBefore, chunk, shellAfter));
46
+ isShellStream = false;
47
+ } else {
48
+ this.push(chunk);
49
+ }
50
+ callback();
51
+ } catch (e) {
52
+ if (e instanceof Error) {
53
+ callback(e);
54
+ } else {
55
+ callback(new Error("Received unkown error when streaming"));
56
+ }
57
+ }
58
+ }
59
+ });
60
+ resolve(pipe(injectableTransform).pipe(stream));
61
+ },
62
+ onShellError(error) {
63
+ var _a;
64
+ ssrContext.metrics.emitCounter(
65
+ "app.render.streaming.shell.error",
66
+ 1
67
+ );
68
+ const { shellAfter, shellBefore } = getTemplates(
69
+ context,
70
+ RenderLevel.CLIENT_RENDER
71
+ );
72
+ const fallbackHtml = `${shellBefore}${shellAfter}`;
73
+ resolve(fallbackHtml);
74
+ (_a = options == null ? void 0 : options.onShellError) == null ? void 0 : _a.call(options, error);
75
+ },
76
+ onError(error) {
77
+ var _a;
78
+ ssrContext.logger.error(
79
+ "An error occurs during streaming SSR",
80
+ error
81
+ );
82
+ ssrContext.metrics.emitCounter("app.render.streaming.error", 1);
83
+ (_a = options == null ? void 0 : options.onError) == null ? void 0 : _a.call(options, error);
84
+ }
85
+ }));
86
+ });
87
+ };
88
+ return forUserPipe;
89
+ function joinChunk(before = "", chunk, after = "") {
90
+ return `${before}${chunk.toString()}${after}`;
91
+ }
92
+ }
93
+ var renderToPipe_default = renderToPipe;
94
+ export {
95
+ renderToPipe_default as default
96
+ };
@@ -0,0 +1,117 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __async = (__this, __arguments, generator) => {
21
+ return new Promise((resolve, reject) => {
22
+ var fulfilled = (value) => {
23
+ try {
24
+ step(generator.next(value));
25
+ } catch (e) {
26
+ reject(e);
27
+ }
28
+ };
29
+ var rejected = (value) => {
30
+ try {
31
+ step(generator.throw(value));
32
+ } catch (e) {
33
+ reject(e);
34
+ }
35
+ };
36
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
37
+ step((generator = generator.apply(__this, __arguments)).next());
38
+ });
39
+ };
40
+ import { RenderLevel } from "../types";
41
+ import { getTemplates } from "./template";
42
+ function renderToPipe(rootElement, context, options) {
43
+ let isShellStream = true;
44
+ const { ssrContext } = context;
45
+ const forUserPipe = (stream) => __async(this, null, function* () {
46
+ let renderToReadableStream;
47
+ try {
48
+ ({ renderToReadableStream } = require("react-dom/server"));
49
+ } catch (e) {
50
+ }
51
+ const { shellAfter, shellBefore } = getTemplates(
52
+ context,
53
+ RenderLevel.SERVER_RENDER
54
+ );
55
+ try {
56
+ const readableOriginal = yield renderToReadableStream(rootElement, __spreadProps(__spreadValues({}, options), {
57
+ onError(error) {
58
+ var _a;
59
+ ssrContext.logger.error(
60
+ "An error occurs during streaming SSR",
61
+ error
62
+ );
63
+ ssrContext.metrics.emitCounter("app.render.streaming.error", 1);
64
+ (_a = options == null ? void 0 : options.onError) == null ? void 0 : _a.call(options, error);
65
+ }
66
+ }));
67
+ const reader = readableOriginal.getReader();
68
+ const injectableStream = new ReadableStream({
69
+ start(controller) {
70
+ function push() {
71
+ return __async(this, null, function* () {
72
+ const { done, value } = yield reader.read();
73
+ if (done) {
74
+ controller.close();
75
+ return;
76
+ }
77
+ if (isShellStream) {
78
+ controller.enqueue(encodeForWebStream(shellBefore));
79
+ controller.enqueue(value);
80
+ controller.enqueue(encodeForWebStream(shellAfter));
81
+ isShellStream = false;
82
+ } else {
83
+ controller.enqueue(value);
84
+ }
85
+ push();
86
+ });
87
+ }
88
+ push();
89
+ }
90
+ });
91
+ return readableOriginal(injectableStream).readableOriginal(stream);
92
+ } catch (err) {
93
+ ssrContext.metrics.emitCounter("app.render.streaming.shell.error", 1);
94
+ const { shellAfter: shellAfter2, shellBefore: shellBefore2 } = getTemplates(
95
+ context,
96
+ RenderLevel.CLIENT_RENDER
97
+ );
98
+ const fallbackHtml = `${shellBefore2}${shellAfter2}`;
99
+ return fallbackHtml;
100
+ }
101
+ });
102
+ return forUserPipe;
103
+ }
104
+ let encoder;
105
+ function encodeForWebStream(thing) {
106
+ if (!encoder) {
107
+ encoder = new TextEncoder();
108
+ }
109
+ if (typeof thing === "string") {
110
+ return encoder.encode(thing);
111
+ }
112
+ return thing;
113
+ }
114
+ var renderToPipe_worker_default = renderToPipe;
115
+ export {
116
+ renderToPipe_worker_default as default
117
+ };
@@ -0,0 +1,12 @@
1
+ import { ServerStyleSheet } from "styled-components";
2
+ function getStyledComponentCss({ jsx }) {
3
+ const sheet = new ServerStyleSheet();
4
+ const collectedJsx = sheet.collectStyles(jsx);
5
+ return {
6
+ styleSheet: sheet,
7
+ jsx: collectedJsx
8
+ };
9
+ }
10
+ export {
11
+ getStyledComponentCss
12
+ };
@@ -0,0 +1,22 @@
1
+ import { buildShellAfterTemplate } from "./buildTemplate.after";
2
+ import { buildShellBeforeTemplate } from "./bulidTemplate.before";
3
+ const HTML_SEPARATOR = "<!--<?- html ?>-->";
4
+ const getTemplates = (context, renderLevel) => {
5
+ const { ssrContext } = context;
6
+ const [beforeAppTemplate = "", afterAppHtmlTemplate = ""] = ssrContext.template.split(HTML_SEPARATOR) || [];
7
+ const builtBeforeTemplate = buildShellBeforeTemplate(
8
+ beforeAppTemplate,
9
+ context
10
+ );
11
+ const builtAfterTemplate = buildShellAfterTemplate(afterAppHtmlTemplate, {
12
+ ssrContext,
13
+ renderLevel
14
+ });
15
+ return {
16
+ shellBefore: builtBeforeTemplate,
17
+ shellAfter: builtAfterTemplate
18
+ };
19
+ };
20
+ export {
21
+ getTemplates
22
+ };
@@ -0,0 +1,172 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+ import React from "react";
22
+ import ReactDomServer from "react-dom/server";
23
+ import serialize from "serialize-javascript";
24
+ import ReactHelmet from "react-helmet";
25
+ import helmetReplace from "../helmet";
26
+ import {
27
+ RenderLevel
28
+ } from "../types";
29
+ import { time } from "../time";
30
+ import prefetch from "../../prefetch";
31
+ import { toFragments } from "./template";
32
+ import { reduce } from "./reduce";
33
+ import * as loadableRenderer from "./loadable";
34
+ import * as styledComponentRenderer from "./styledComponent";
35
+ const buildTemplateData = (context, data, renderLevel) => {
36
+ const { request } = context;
37
+ return {
38
+ data,
39
+ context: {
40
+ request: {
41
+ params: request.params,
42
+ query: request.query,
43
+ pathname: request.pathname,
44
+ host: request.host,
45
+ url: request.url,
46
+ headers: request.headers,
47
+ cookieMap: request.cookieMap
48
+ }
49
+ },
50
+ renderLevel
51
+ };
52
+ };
53
+ class Entry {
54
+ constructor(options) {
55
+ const { ctx, config } = options;
56
+ const {
57
+ entryName,
58
+ template,
59
+ request: { host }
60
+ } = ctx;
61
+ this.fragments = toFragments(template, entryName);
62
+ this.entryName = entryName;
63
+ this.host = host;
64
+ this.App = options.App;
65
+ this.pluginConfig = config;
66
+ this.metrics = ctx.metrics;
67
+ this.logger = ctx.logger;
68
+ this.result = {
69
+ renderLevel: RenderLevel.CLIENT_RENDER,
70
+ html: "",
71
+ chunksMap: {
72
+ js: "",
73
+ css: ""
74
+ }
75
+ };
76
+ }
77
+ renderToHtml(context) {
78
+ return __async(this, null, function* () {
79
+ var _a, _b, _c;
80
+ const ssrContext = context.ssrContext;
81
+ if ((_a = ssrContext.redirection) == null ? void 0 : _a.url) {
82
+ return "";
83
+ }
84
+ const prefetchData = yield this.prefetch(context);
85
+ if ((_b = ssrContext.redirection) == null ? void 0 : _b.url) {
86
+ return "";
87
+ }
88
+ if (this.result.renderLevel >= RenderLevel.SERVER_PREFETCH) {
89
+ this.result.html = this.renderToString(context);
90
+ }
91
+ if ((_c = ssrContext.redirection) == null ? void 0 : _c.url) {
92
+ return "";
93
+ }
94
+ let html = "";
95
+ const templateData = buildTemplateData(
96
+ ssrContext,
97
+ prefetchData,
98
+ this.result.renderLevel
99
+ );
100
+ const SSRData = this.getSSRDataScript(templateData);
101
+ for (const fragment of this.fragments) {
102
+ if (fragment.isVariable && fragment.content === "SSRDataScript") {
103
+ html += fragment.getValue(SSRData);
104
+ } else {
105
+ html += fragment.getValue(this.result);
106
+ }
107
+ }
108
+ const helmetData = ReactHelmet.renderStatic();
109
+ return helmetData ? helmetReplace(html, helmetData) : html;
110
+ });
111
+ }
112
+ prefetch(context) {
113
+ return __async(this, null, function* () {
114
+ let prefetchData;
115
+ const end = time();
116
+ try {
117
+ prefetchData = yield prefetch(this.App, context);
118
+ this.result.renderLevel = RenderLevel.SERVER_PREFETCH;
119
+ const prefetchCost = end();
120
+ this.logger.debug(`App Prefetch cost = %d ms`, prefetchCost);
121
+ this.metrics.emitTimer("app.prefetch.cost", prefetchCost);
122
+ } catch (e) {
123
+ this.result.renderLevel = RenderLevel.CLIENT_RENDER;
124
+ this.logger.error("App Prefetch Render", e);
125
+ this.metrics.emitCounter("app.prefetch.render.error", 1);
126
+ }
127
+ return prefetchData || {};
128
+ });
129
+ }
130
+ renderToString(context) {
131
+ let html = "";
132
+ const end = time();
133
+ const { ssrContext } = context;
134
+ try {
135
+ const App = React.createElement(this.App, {
136
+ context: Object.assign(context, { ssr: true })
137
+ });
138
+ const renderContext = {
139
+ stats: ssrContext.loadableStats,
140
+ host: this.host,
141
+ result: this.result,
142
+ entryName: this.entryName,
143
+ config: this.pluginConfig
144
+ };
145
+ html = reduce(App, renderContext, [
146
+ styledComponentRenderer.toHtml,
147
+ loadableRenderer.toHtml,
148
+ (jsx) => ReactDomServer.renderToString(jsx)
149
+ ]);
150
+ const cost = end();
151
+ this.logger.debug("App Render To HTML cost = %d ms", cost);
152
+ this.metrics.emitTimer("app.render.html.cost", cost);
153
+ this.result.renderLevel = RenderLevel.SERVER_RENDER;
154
+ } catch (e) {
155
+ this.logger.error("App Render To HTML", e);
156
+ this.metrics.emitCounter("app.render.html.error", 1);
157
+ }
158
+ return html;
159
+ }
160
+ getSSRDataScript(templateData) {
161
+ return {
162
+ SSRDataScript: `
163
+ <script>window._SSR_DATA = ${serialize(templateData, {
164
+ isJSON: true
165
+ })}<\/script>
166
+ `
167
+ };
168
+ }
169
+ }
170
+ export {
171
+ Entry as default
172
+ };
@@ -0,0 +1,52 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+ import { run } from "@modern-js/utils/ssr";
22
+ import { PreRender } from "../../react/prerender";
23
+ import { time } from "../time";
24
+ import SSREntry from "./entry";
25
+ const render = ({
26
+ App,
27
+ context,
28
+ config
29
+ }) => {
30
+ const ssrContext = context.ssrContext;
31
+ return run(ssrContext.request.headers, () => __async(void 0, null, function* () {
32
+ const entry = new SSREntry({
33
+ ctx: ssrContext,
34
+ App,
35
+ config
36
+ });
37
+ entry.metrics.emitCounter("app.visit.count", 1);
38
+ const end = time();
39
+ const html = yield entry.renderToHtml(context);
40
+ const cost = end();
41
+ entry.logger.info("App Render Total cost = %d ms", cost);
42
+ entry.metrics.emitTimer("app.render.cost", cost);
43
+ const cacheConfig = PreRender.config();
44
+ if (cacheConfig) {
45
+ context.ssrContext.cacheConfig = cacheConfig;
46
+ }
47
+ return html;
48
+ }));
49
+ };
50
+ export {
51
+ render
52
+ };
@@ -0,0 +1,49 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+ import { PreRender } from "../../react/prerender";
22
+ import { time } from "../time";
23
+ import SSREntry from "./entry";
24
+ const render = (_0) => __async(void 0, [_0], function* ({
25
+ App,
26
+ context,
27
+ config
28
+ }) {
29
+ const ssrContext = context.ssrContext;
30
+ const entry = new SSREntry({
31
+ ctx: ssrContext,
32
+ App,
33
+ config
34
+ });
35
+ entry.metrics.emitCounter("app.visit.count", 1);
36
+ const end = time();
37
+ const html = yield entry.renderToHtml(context);
38
+ const cost = end();
39
+ entry.logger.info("App Render Total cost = %d ms", cost);
40
+ entry.metrics.emitTimer("app.render.cost", cost);
41
+ const cacheConfig = PreRender.config();
42
+ if (cacheConfig) {
43
+ context.ssrContext.cacheConfig = cacheConfig;
44
+ }
45
+ return html;
46
+ });
47
+ export {
48
+ render
49
+ };
@@ -0,0 +1,48 @@
1
+ import { ChunkExtractor } from "@loadable/server";
2
+ import { isCrossOrigin } from "../../utils";
3
+ import { getLoadableScripts } from "../utils";
4
+ const extname = (uri) => {
5
+ if (typeof uri !== "string" || !uri.includes(".")) {
6
+ return "";
7
+ }
8
+ return `.${uri == null ? void 0 : uri.split(".").pop()}` || "";
9
+ };
10
+ const toHtml = (jsx, renderer, next) => {
11
+ const {
12
+ stats,
13
+ result: { chunksMap },
14
+ host,
15
+ config = {}
16
+ } = renderer;
17
+ if (!stats || chunksMap.js) {
18
+ return next(jsx);
19
+ }
20
+ const extractor = new ChunkExtractor({
21
+ stats,
22
+ entrypoints: [renderer.entryName]
23
+ });
24
+ const html = next(extractor.collectChunks(jsx));
25
+ const chunks = extractor.getChunkAssets(extractor.chunks);
26
+ chunksMap.js = (chunksMap.js || "") + getLoadableScripts(extractor);
27
+ for (const v of chunks) {
28
+ const fileType = extname(v.url).slice(1);
29
+ if (fileType === "js") {
30
+ const props = [];
31
+ const { crossorigin } = config;
32
+ if (crossorigin && isCrossOrigin(v.url, host)) {
33
+ props.push(
34
+ `crossorigin="${crossorigin === true ? "anonymous" : crossorigin}"`
35
+ );
36
+ }
37
+ chunksMap[fileType] += `<script src="${v.url}" ${props.join(
38
+ " "
39
+ )}><\/script>`;
40
+ } else if (fileType === "css") {
41
+ chunksMap[fileType] += `<link href="${v.url}" rel="stylesheet" />`;
42
+ }
43
+ }
44
+ return html;
45
+ };
46
+ export {
47
+ toHtml
48
+ };
@@ -0,0 +1,8 @@
1
+ function reduce(jsx, renderer, middleware) {
2
+ let index = 0;
3
+ const createNext = () => (App) => middleware[index++](App, renderer, createNext());
4
+ return createNext()(jsx);
5
+ }
6
+ export {
7
+ reduce
8
+ };
@@ -0,0 +1,11 @@
1
+ import { ServerStyleSheet } from "styled-components";
2
+ const toHtml = (jsx, renderer, next) => {
3
+ const sheet = new ServerStyleSheet();
4
+ const html = next(sheet.collectStyles(jsx));
5
+ const css = sheet.getStyleTags();
6
+ renderer.result.chunksMap.css += css;
7
+ return html;
8
+ };
9
+ export {
10
+ toHtml
11
+ };
@@ -0,0 +1,58 @@
1
+ const VARIABLE_REG_EXP = /<!--<\?([-=+])\s*(.*?)\s*\?>-->/;
2
+ const VARIABLE_SPLITTER = /(<!--<\?.*?\?>-->)/;
3
+ const ENCODE_HTML_RULES = {
4
+ "&": "&amp;",
5
+ "<": "&lt;",
6
+ ">": "&gt;",
7
+ '"': "&#34;",
8
+ "'": "&#39;"
9
+ };
10
+ const MATCH_HTML = /[&<>'"]/g;
11
+ function encodeChar(c) {
12
+ return ENCODE_HTML_RULES[c] || c;
13
+ }
14
+ function escape(str) {
15
+ return str.replace(MATCH_HTML, encodeChar);
16
+ }
17
+ const _Fragment = class {
18
+ constructor(template) {
19
+ const match = VARIABLE_REG_EXP.exec(template);
20
+ if (match) {
21
+ const [, filterFlag, content] = match;
22
+ this.isVariable = true;
23
+ this.content = content;
24
+ this.filters = [_Fragment.filterMap[filterFlag]];
25
+ this.path = content.replace(/\[['"](.*?)['"]\]/g, ".$1").split(".");
26
+ } else {
27
+ this.isVariable = false;
28
+ this.content = template;
29
+ this.filters = [];
30
+ this.path = [];
31
+ }
32
+ }
33
+ getValue(data) {
34
+ if (this.isVariable) {
35
+ const value = this.path.reduce((p, n) => p != null ? p[n] : p, data);
36
+ return this.filters.reduce((p, n) => n(p), value != null ? value : "");
37
+ }
38
+ return this.content;
39
+ }
40
+ };
41
+ let Fragment = _Fragment;
42
+ Fragment.filterMap = {
43
+ "=": escape,
44
+ "-": (v) => v
45
+ };
46
+ const fragmentListMap = {};
47
+ function toFragments(template, entryName) {
48
+ if (fragmentListMap[entryName]) {
49
+ return fragmentListMap[entryName];
50
+ }
51
+ const fragmentList = template.split(VARIABLE_SPLITTER).filter((v) => Boolean(v)).map((v) => new Fragment(v));
52
+ fragmentListMap[entryName] = fragmentList;
53
+ return fragmentList;
54
+ }
55
+ export {
56
+ Fragment,
57
+ toFragments
58
+ };
@@ -0,0 +1,9 @@
1
+ var RenderLevel = /* @__PURE__ */ ((RenderLevel2) => {
2
+ RenderLevel2[RenderLevel2["CLIENT_RENDER"] = 0] = "CLIENT_RENDER";
3
+ RenderLevel2[RenderLevel2["SERVER_PREFETCH"] = 1] = "SERVER_PREFETCH";
4
+ RenderLevel2[RenderLevel2["SERVER_RENDER"] = 2] = "SERVER_RENDER";
5
+ return RenderLevel2;
6
+ })(RenderLevel || {});
7
+ export {
8
+ RenderLevel
9
+ };
@@ -0,0 +1,13 @@
1
+ const getLatency = (hrtime) => {
2
+ const [s, ns] = process.hrtime(hrtime);
3
+ return s * 1e3 + ns / 1e6;
4
+ };
5
+ const time = () => {
6
+ const hrtime = process.hrtime();
7
+ return () => {
8
+ return getLatency(hrtime);
9
+ };
10
+ };
11
+ export {
12
+ time
13
+ };