vite-plugin-react-server 1.1.12 → 1.1.13

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 (373) hide show
  1. package/dist/package.json +10 -8
  2. package/dist/plugin/components/css-collector-elements.d.ts +4 -2
  3. package/dist/plugin/components/css-collector-elements.d.ts.map +1 -1
  4. package/dist/plugin/components/css-collector-elements.js +21 -7
  5. package/dist/plugin/components/css-collector-elements.js.map +1 -1
  6. package/dist/plugin/components/css-collector.d.ts +4 -5
  7. package/dist/plugin/components/css-collector.d.ts.map +1 -1
  8. package/dist/plugin/components/css-collector.js +5 -9
  9. package/dist/plugin/components/css-collector.js.map +1 -1
  10. package/dist/plugin/components/html.d.ts +1 -1
  11. package/dist/plugin/components/html.d.ts.map +1 -1
  12. package/dist/plugin/components/html.js +14 -3
  13. package/dist/plugin/components/html.js.map +1 -1
  14. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts +4 -4
  15. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts.map +1 -1
  16. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.js +14 -9
  17. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.js.map +1 -1
  18. package/dist/plugin/config/defaults.d.ts +66 -12
  19. package/dist/plugin/config/defaults.d.ts.map +1 -1
  20. package/dist/plugin/config/defaults.js +69 -15
  21. package/dist/plugin/config/defaults.js.map +1 -1
  22. package/dist/plugin/config/resolveAutoDiscoverMatcher.d.ts +5 -0
  23. package/dist/plugin/config/resolveAutoDiscoverMatcher.d.ts.map +1 -0
  24. package/dist/plugin/config/resolveAutoDiscoverMatcher.js +25 -0
  25. package/dist/plugin/config/resolveAutoDiscoverMatcher.js.map +1 -0
  26. package/dist/plugin/config/resolveEnv.d.ts.map +1 -1
  27. package/dist/plugin/config/resolveEnv.js +16 -5
  28. package/dist/plugin/config/resolveEnv.js.map +1 -1
  29. package/dist/plugin/config/resolveOptions.d.ts +3 -3
  30. package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
  31. package/dist/plugin/config/resolveOptions.js +59 -87
  32. package/dist/plugin/config/resolveOptions.js.map +1 -1
  33. package/dist/plugin/config/resolveUserConfig.d.ts +4 -4
  34. package/dist/plugin/config/resolveUserConfig.d.ts.map +1 -1
  35. package/dist/plugin/config/resolveUserConfig.js +8 -1
  36. package/dist/plugin/config/resolveUserConfig.js.map +1 -1
  37. package/dist/plugin/error/toError.d.ts +3 -0
  38. package/dist/plugin/error/toError.d.ts.map +1 -1
  39. package/dist/plugin/error/toError.js +33 -4
  40. package/dist/plugin/error/toError.js.map +1 -1
  41. package/dist/plugin/helpers/cleanObject.d.ts.map +1 -1
  42. package/dist/plugin/helpers/cleanObject.js +19 -5
  43. package/dist/plugin/helpers/cleanObject.js.map +1 -1
  44. package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts +3 -3
  45. package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts.map +1 -1
  46. package/dist/plugin/helpers/collectViteModuleGraphCss.js.map +1 -1
  47. package/dist/plugin/helpers/createCssProps.d.ts +4 -3
  48. package/dist/plugin/helpers/createCssProps.d.ts.map +1 -1
  49. package/dist/plugin/helpers/createCssProps.js +7 -2
  50. package/dist/plugin/helpers/createCssProps.js.map +1 -1
  51. package/dist/plugin/helpers/createHandler.d.ts +4 -3
  52. package/dist/plugin/helpers/createHandler.d.ts.map +1 -1
  53. package/dist/plugin/helpers/createHandler.js +1 -1
  54. package/dist/plugin/helpers/createHandler.js.map +1 -1
  55. package/dist/plugin/helpers/createRscStream.d.ts +2 -2
  56. package/dist/plugin/helpers/createRscStream.d.ts.map +1 -1
  57. package/dist/plugin/helpers/createRscStream.js +15 -5
  58. package/dist/plugin/helpers/createRscStream.js.map +1 -1
  59. package/dist/plugin/helpers/index.d.ts +2 -2
  60. package/dist/plugin/helpers/index.d.ts.map +1 -1
  61. package/dist/plugin/helpers/index.js +2 -2
  62. package/dist/plugin/helpers/inputNormalizer.d.ts.map +1 -1
  63. package/dist/plugin/helpers/inputNormalizer.js +4 -1
  64. package/dist/plugin/helpers/inputNormalizer.js.map +1 -1
  65. package/dist/plugin/helpers/moduleResolver.d.ts +3 -0
  66. package/dist/plugin/helpers/moduleResolver.d.ts.map +1 -0
  67. package/dist/plugin/helpers/moduleResolver.js +25 -0
  68. package/dist/plugin/helpers/requestInfo.d.ts +18 -3
  69. package/dist/plugin/helpers/requestInfo.d.ts.map +1 -1
  70. package/dist/plugin/helpers/requestInfo.js +75 -11
  71. package/dist/plugin/helpers/requestInfo.js.map +1 -1
  72. package/dist/plugin/helpers/resolvePage.d.ts.map +1 -1
  73. package/dist/plugin/helpers/resolvePage.js +2 -3
  74. package/dist/plugin/helpers/resolvePage.js.map +1 -1
  75. package/dist/plugin/helpers/resolvePageAndProps.d.ts +4 -3
  76. package/dist/plugin/helpers/resolvePageAndProps.d.ts.map +1 -1
  77. package/dist/plugin/helpers/resolvePageAndProps.js.map +1 -1
  78. package/dist/plugin/helpers/serializeUserOptions.d.ts +3 -2
  79. package/dist/plugin/helpers/serializeUserOptions.d.ts.map +1 -1
  80. package/dist/plugin/helpers/serializeUserOptions.js +13 -1
  81. package/dist/plugin/helpers/serializeUserOptions.js.map +1 -1
  82. package/dist/plugin/helpers/sourceMap.d.ts +8 -0
  83. package/dist/plugin/helpers/sourceMap.d.ts.map +1 -0
  84. package/dist/plugin/helpers/sourceMap.js +136 -0
  85. package/dist/plugin/helpers.js +1 -1
  86. package/dist/plugin/loader/createBuildLoader.d.ts +7 -22
  87. package/dist/plugin/loader/createBuildLoader.d.ts.map +1 -1
  88. package/dist/plugin/loader/createBuildLoader.js +79 -65
  89. package/dist/plugin/loader/createBuildLoader.js.map +1 -1
  90. package/dist/plugin/loader/createDefaultLoader.d.ts +13 -0
  91. package/dist/plugin/loader/createDefaultLoader.d.ts.map +1 -0
  92. package/dist/plugin/loader/createDefaultLoader.js +47 -0
  93. package/dist/plugin/loader/css-loader.development.d.ts +1 -0
  94. package/dist/plugin/loader/css-loader.development.d.ts.map +1 -1
  95. package/dist/plugin/loader/css-loader.development.js +1 -1
  96. package/dist/plugin/loader/css-loader.development.js.map +1 -1
  97. package/dist/plugin/loader/handleExports.d.ts +33 -0
  98. package/dist/plugin/loader/handleExports.d.ts.map +1 -0
  99. package/dist/plugin/loader/handleExports.js +174 -0
  100. package/dist/plugin/loader/handleExports.js.map +1 -0
  101. package/dist/plugin/loader/index.d.ts +1 -1
  102. package/dist/plugin/loader/index.d.ts.map +1 -1
  103. package/dist/plugin/loader/index.js +4 -1
  104. package/dist/plugin/loader/parse.d.ts +6 -0
  105. package/dist/plugin/loader/parse.d.ts.map +1 -0
  106. package/dist/plugin/loader/parse.js +23 -0
  107. package/dist/plugin/loader/parse.js.map +1 -0
  108. package/dist/plugin/loader/react-loader.client.d.ts +2 -0
  109. package/dist/plugin/loader/react-loader.client.d.ts.map +1 -0
  110. package/dist/plugin/loader/react-loader.client.js +2 -0
  111. package/dist/plugin/loader/react-loader.d.ts +1 -12
  112. package/dist/plugin/loader/react-loader.d.ts.map +1 -1
  113. package/dist/plugin/loader/react-loader.js +5 -687
  114. package/dist/plugin/loader/react-loader.js.map +1 -1
  115. package/dist/plugin/loader/react-loader.server.d.ts +21 -0
  116. package/dist/plugin/loader/react-loader.server.d.ts.map +1 -0
  117. package/dist/plugin/loader/react-loader.server.js +69 -0
  118. package/dist/plugin/loader/sourceMap.d.ts +35 -0
  119. package/dist/plugin/loader/sourceMap.d.ts.map +1 -0
  120. package/dist/plugin/loader/sourceMap.js +105 -0
  121. package/dist/plugin/loader/temporaryReferences.d.ts +1 -1
  122. package/dist/plugin/loader/temporaryReferences.d.ts.map +1 -1
  123. package/dist/plugin/loader/transformModuleIfNeeded.d.ts +2 -0
  124. package/dist/plugin/loader/transformModuleIfNeeded.d.ts.map +1 -0
  125. package/dist/plugin/loader/transformModuleIfNeeded.js +27 -0
  126. package/dist/plugin/loader/transformModuleIfNeeded.js.map +1 -0
  127. package/dist/plugin/loader/transformModuleWithPreservedFunctions.d.ts +27 -0
  128. package/dist/plugin/loader/transformModuleWithPreservedFunctions.d.ts.map +1 -0
  129. package/dist/plugin/loader/transformModuleWithPreservedFunctions.js +52 -0
  130. package/dist/plugin/loader/transformModuleWithPreservedFunctions.js.map +1 -0
  131. package/dist/plugin/loader/types.d.ts +8 -0
  132. package/dist/plugin/loader/types.d.ts.map +1 -0
  133. package/dist/plugin/loader/types.js +1 -0
  134. package/dist/plugin/plugin.client.d.ts +2 -2
  135. package/dist/plugin/plugin.client.d.ts.map +1 -1
  136. package/dist/plugin/plugin.client.js +2 -3
  137. package/dist/plugin/plugin.client.js.map +1 -1
  138. package/dist/plugin/plugin.server.d.ts +2 -2
  139. package/dist/plugin/plugin.server.d.ts.map +1 -1
  140. package/dist/plugin/plugin.server.js +2 -2
  141. package/dist/plugin/plugin.server.js.map +1 -1
  142. package/dist/plugin/preserver/plugin.d.ts +2 -2
  143. package/dist/plugin/preserver/plugin.d.ts.map +1 -1
  144. package/dist/plugin/preserver/plugin.js +6 -2
  145. package/dist/plugin/preserver/plugin.js.map +1 -1
  146. package/dist/plugin/react-client/{server.d.ts → configureWorkerRequestHandler.d.ts} +4 -4
  147. package/dist/plugin/react-client/configureWorkerRequestHandler.d.ts.map +1 -0
  148. package/dist/plugin/react-client/{server.js → configureWorkerRequestHandler.js} +11 -8
  149. package/dist/plugin/react-client/configureWorkerRequestHandler.js.map +1 -0
  150. package/dist/plugin/react-client/createMessageHandlers.d.ts +1 -1
  151. package/dist/plugin/react-client/createMessageHandlers.d.ts.map +1 -1
  152. package/dist/plugin/react-client/createMessageHandlers.js +18 -11
  153. package/dist/plugin/react-client/createMessageHandlers.js.map +1 -1
  154. package/dist/plugin/react-client/createWorkerStream.d.ts +5 -3
  155. package/dist/plugin/react-client/createWorkerStream.d.ts.map +1 -1
  156. package/dist/plugin/react-client/createWorkerStream.js +61 -27
  157. package/dist/plugin/react-client/createWorkerStream.js.map +1 -1
  158. package/dist/plugin/react-client/handleWorkerRscStream.d.ts +1 -1
  159. package/dist/plugin/react-client/handleWorkerRscStream.d.ts.map +1 -1
  160. package/dist/plugin/react-client/handleWorkerRscStream.js +14 -4
  161. package/dist/plugin/react-client/handleWorkerRscStream.js.map +1 -1
  162. package/dist/plugin/react-client/plugin.d.ts +2 -2
  163. package/dist/plugin/react-client/plugin.d.ts.map +1 -1
  164. package/dist/plugin/react-client/plugin.js +7 -8
  165. package/dist/plugin/react-client/plugin.js.map +1 -1
  166. package/dist/plugin/react-client/restartWorker.d.ts +1 -1
  167. package/dist/plugin/react-client/restartWorker.d.ts.map +1 -1
  168. package/dist/plugin/react-client/restartWorker.js +9 -3
  169. package/dist/plugin/react-client/restartWorker.js.map +1 -1
  170. package/dist/plugin/react-server/configureReactServer.d.ts +9 -0
  171. package/dist/plugin/react-server/configureReactServer.d.ts.map +1 -0
  172. package/dist/plugin/react-server/{server.js → configureReactServer.js} +26 -8
  173. package/dist/plugin/react-server/configureReactServer.js.map +1 -0
  174. package/dist/plugin/react-server/handleServerAction.d.ts +5 -0
  175. package/dist/plugin/react-server/handleServerAction.d.ts.map +1 -0
  176. package/dist/plugin/react-server/handleServerAction.js +145 -0
  177. package/dist/plugin/react-server/handleServerAction.js.map +1 -0
  178. package/dist/plugin/react-server/plugin.d.ts +2 -2
  179. package/dist/plugin/react-server/plugin.d.ts.map +1 -1
  180. package/dist/plugin/react-server/plugin.js +1 -1
  181. package/dist/plugin/react-server/plugin.js.map +1 -1
  182. package/dist/plugin/react-static/collectHtmlWorkerContent.d.ts +2 -2
  183. package/dist/plugin/react-static/collectHtmlWorkerContent.d.ts.map +1 -1
  184. package/dist/plugin/react-static/collectHtmlWorkerContent.js.map +1 -1
  185. package/dist/plugin/react-static/collectRscContent.d.ts +2 -2
  186. package/dist/plugin/react-static/collectRscContent.d.ts.map +1 -1
  187. package/dist/plugin/react-static/collectRscContent.js.map +1 -1
  188. package/dist/plugin/react-static/configurePreviewServer.d.ts +3 -3
  189. package/dist/plugin/react-static/configurePreviewServer.d.ts.map +1 -1
  190. package/dist/plugin/react-static/configurePreviewServer.js +18 -7
  191. package/dist/plugin/react-static/configurePreviewServer.js.map +1 -1
  192. package/dist/plugin/react-static/plugin.d.ts +2 -2
  193. package/dist/plugin/react-static/plugin.d.ts.map +1 -1
  194. package/dist/plugin/react-static/plugin.js +28 -12
  195. package/dist/plugin/react-static/plugin.js.map +1 -1
  196. package/dist/plugin/react-static/renderPage.d.ts +2 -2
  197. package/dist/plugin/react-static/renderPage.d.ts.map +1 -1
  198. package/dist/plugin/react-static/renderPage.js.map +1 -1
  199. package/dist/plugin/react-static/renderPages.d.ts +2 -2
  200. package/dist/plugin/react-static/renderPages.d.ts.map +1 -1
  201. package/dist/plugin/react-static/renderPages.js.map +1 -1
  202. package/dist/plugin/react-static/renderStreams.d.ts +2 -2
  203. package/dist/plugin/react-static/renderStreams.d.ts.map +1 -1
  204. package/dist/plugin/react-static/renderStreams.js +4 -4
  205. package/dist/plugin/react-static/renderStreams.js.map +1 -1
  206. package/dist/plugin/source-map/createMappingsSerializer.d.ts +2 -0
  207. package/dist/plugin/source-map/createMappingsSerializer.d.ts.map +1 -0
  208. package/dist/plugin/source-map/createMappingsSerializer.js +159 -0
  209. package/dist/plugin/source-map/readMappings.d.ts +2 -0
  210. package/dist/plugin/source-map/readMappings.d.ts.map +1 -0
  211. package/dist/plugin/source-map/readMappings.js +201 -0
  212. package/dist/plugin/transformer/index.d.ts +0 -1
  213. package/dist/plugin/transformer/index.d.ts.map +1 -1
  214. package/dist/plugin/transformer/index.js +0 -1
  215. package/dist/plugin/transformer/plugin.client.d.ts +1 -3
  216. package/dist/plugin/transformer/plugin.client.d.ts.map +1 -1
  217. package/dist/plugin/transformer/plugin.client.js +1 -84
  218. package/dist/plugin/transformer/plugin.server.d.ts +2 -2
  219. package/dist/plugin/transformer/plugin.server.d.ts.map +1 -1
  220. package/dist/plugin/transformer/plugin.server.js +52 -20
  221. package/dist/plugin/transformer/plugin.server.js.map +1 -1
  222. package/dist/plugin/types.d.ts +89 -119
  223. package/dist/plugin/types.d.ts.map +1 -1
  224. package/dist/plugin/utils/callServer.d.ts +1 -1
  225. package/dist/plugin/utils/callServer.d.ts.map +1 -1
  226. package/dist/plugin/utils/createCallServer.d.ts +1 -1
  227. package/dist/plugin/utils/createCallServer.d.ts.map +1 -1
  228. package/dist/plugin/utils/createCallServer.js +13 -4
  229. package/dist/plugin/utils/createCallServer.js.map +1 -1
  230. package/dist/plugin/utils/index.d.ts +1 -0
  231. package/dist/plugin/utils/index.d.ts.map +1 -1
  232. package/dist/plugin/utils/index.js +1 -0
  233. package/dist/plugin/utils.js +1 -0
  234. package/dist/plugin/utils.js.map +1 -1
  235. package/dist/plugin/vendor/vendor.client.d.ts +2 -1
  236. package/dist/plugin/vendor/vendor.client.d.ts.map +1 -1
  237. package/dist/plugin/vendor/vendor.client.js +2 -1
  238. package/dist/plugin/vendor/vendor.client.js.map +1 -1
  239. package/dist/plugin/vendor/vendor.server.d.ts.map +1 -1
  240. package/dist/plugin/vendor/vendor.server.js +1 -1
  241. package/dist/plugin/vendor/vendor.server.js.map +1 -1
  242. package/dist/plugin/worker/createWorker.d.ts.map +1 -1
  243. package/dist/plugin/worker/createWorker.js +17 -22
  244. package/dist/plugin/worker/createWorker.js.map +1 -1
  245. package/dist/plugin/worker/html/createHtmlWorkerRenderState.d.ts.map +1 -1
  246. package/dist/plugin/worker/html/createHtmlWorkerRenderState.js +25 -4
  247. package/dist/plugin/worker/html/createHtmlWorkerRenderState.js.map +1 -1
  248. package/dist/plugin/worker/html/html-worker.development.js +15 -13
  249. package/dist/plugin/worker/html/html-worker.development.js.map +1 -1
  250. package/dist/plugin/worker/html/html-worker.production.js +2 -12
  251. package/dist/plugin/worker/html/html-worker.production.js.map +1 -1
  252. package/dist/plugin/worker/html/messageHandler.d.ts.map +1 -1
  253. package/dist/plugin/worker/html/messageHandler.js +2 -2
  254. package/dist/plugin/worker/html/messageHandler.js.map +1 -1
  255. package/dist/plugin/worker/rsc/handleRender.d.ts +2 -1
  256. package/dist/plugin/worker/rsc/handleRender.d.ts.map +1 -1
  257. package/dist/plugin/worker/rsc/handleRender.js +8 -8
  258. package/dist/plugin/worker/rsc/handleRender.js.map +1 -1
  259. package/dist/plugin/worker/rsc/messageHandler.d.ts.map +1 -1
  260. package/dist/plugin/worker/rsc/messageHandler.js +166 -107
  261. package/dist/plugin/worker/rsc/messageHandler.js.map +1 -1
  262. package/dist/plugin/worker/rsc/rsc-worker.development.js +112 -52
  263. package/dist/plugin/worker/rsc/rsc-worker.development.js.map +1 -1
  264. package/dist/plugin/worker/rsc/rsc-worker.production.js +1 -1
  265. package/dist/plugin/worker/rsc/rsc-worker.production.js.map +1 -1
  266. package/dist/plugin/worker/rsc/state.d.ts +5 -64
  267. package/dist/plugin/worker/rsc/state.d.ts.map +1 -1
  268. package/dist/plugin/worker/rsc/state.js +5 -1
  269. package/dist/plugin/worker/rsc/state.js.map +1 -1
  270. package/dist/plugin/worker/sendMessage.d.ts +2 -0
  271. package/dist/plugin/worker/sendMessage.d.ts.map +1 -1
  272. package/dist/plugin/worker/sendMessage.js +2 -1
  273. package/dist/plugin/worker/sendMessage.js.map +1 -1
  274. package/dist/plugin/worker/types.d.ts +52 -53
  275. package/dist/plugin/worker/types.d.ts.map +1 -1
  276. package/dist/tsconfig.tsbuildinfo +1 -1
  277. package/package.json +10 -8
  278. package/plugin/components/css-collector-elements.tsx +30 -9
  279. package/plugin/components/css-collector.tsx +13 -22
  280. package/plugin/components/html.tsx +12 -5
  281. package/plugin/config/autoDiscover/resolveAutoDiscover.ts +31 -13
  282. package/plugin/config/defaults.tsx +72 -16
  283. package/plugin/config/resolveAutoDiscoverMatcher.ts +23 -0
  284. package/plugin/config/resolveEnv.ts +20 -12
  285. package/plugin/config/resolveOptions.ts +152 -155
  286. package/plugin/config/resolveUserConfig.ts +20 -5
  287. package/plugin/error/toError.ts +35 -1
  288. package/plugin/helpers/cleanObject.ts +79 -15
  289. package/plugin/helpers/collectViteModuleGraphCss.ts +4 -3
  290. package/plugin/helpers/createCssProps.tsx +26 -9
  291. package/plugin/helpers/createHandler.ts +7 -4
  292. package/plugin/helpers/createRscStream.tsx +20 -14
  293. package/plugin/helpers/index.ts +2 -2
  294. package/plugin/helpers/inputNormalizer.ts +4 -2
  295. package/plugin/helpers/moduleResolver.ts +36 -0
  296. package/plugin/helpers/requestInfo.ts +117 -23
  297. package/plugin/helpers/resolvePage.ts +2 -3
  298. package/plugin/helpers/resolvePageAndProps.ts +7 -6
  299. package/plugin/helpers/serializeUserOptions.ts +20 -2
  300. package/plugin/helpers/sourceMap.ts +182 -0
  301. package/plugin/loader/createBuildLoader.ts +124 -104
  302. package/plugin/loader/createDefaultLoader.ts +62 -0
  303. package/plugin/loader/css-loader.development.ts +3 -2
  304. package/plugin/loader/handleExports.ts +276 -0
  305. package/plugin/loader/index.ts +6 -1
  306. package/plugin/loader/parse.ts +22 -0
  307. package/plugin/loader/react-loader.client.ts +1 -0
  308. package/plugin/loader/react-loader.server.ts +107 -0
  309. package/plugin/loader/react-loader.ts +4 -1002
  310. package/plugin/loader/sourceMap.ts +118 -0
  311. package/plugin/loader/transformModuleIfNeeded.ts +33 -0
  312. package/plugin/loader/transformModuleWithPreservedFunctions.ts +119 -0
  313. package/plugin/loader/types.ts +10 -0
  314. package/plugin/plugin.client.ts +18 -11
  315. package/plugin/plugin.server.ts +6 -3
  316. package/plugin/preserver/plugin.ts +37 -17
  317. package/plugin/react-client/{server.ts → configureWorkerRequestHandler.ts} +22 -12
  318. package/plugin/react-client/createMessageHandlers.ts +21 -13
  319. package/plugin/react-client/createWorkerStream.ts +71 -33
  320. package/plugin/react-client/handleWorkerRscStream.ts +15 -5
  321. package/plugin/react-client/plugin.ts +18 -13
  322. package/plugin/react-client/restartWorker.ts +17 -5
  323. package/plugin/react-server/{server.ts → configureReactServer.ts} +40 -9
  324. package/plugin/react-server/handleServerAction.ts +177 -0
  325. package/plugin/react-server/plugin.ts +8 -3
  326. package/plugin/react-static/collectHtmlWorkerContent.ts +11 -3
  327. package/plugin/react-static/collectRscContent.ts +17 -9
  328. package/plugin/react-static/configurePreviewServer.ts +37 -17
  329. package/plugin/react-static/plugin.ts +45 -22
  330. package/plugin/react-static/renderPage.ts +12 -6
  331. package/plugin/react-static/renderPages.ts +15 -4
  332. package/plugin/react-static/renderStreams.ts +13 -12
  333. package/plugin/source-map/createMappingsSerializer.ts +182 -0
  334. package/plugin/source-map/readMappings.ts +195 -0
  335. package/plugin/transformer/README.md +295 -29
  336. package/plugin/transformer/index.ts +0 -1
  337. package/plugin/transformer/plugin.client.ts +0 -111
  338. package/plugin/transformer/plugin.server.ts +94 -25
  339. package/plugin/types/react-server-dom-esm.d.ts +183 -24
  340. package/plugin/types/sourceMap.d.ts +2 -0
  341. package/plugin/types/webpack-sources.d.ts +24 -0
  342. package/plugin/types.ts +169 -132
  343. package/plugin/utils/createCallServer.ts +21 -6
  344. package/plugin/utils/index.ts +2 -1
  345. package/plugin/vendor/vendor.client.ts +2 -1
  346. package/plugin/vendor/vendor.server.ts +1 -1
  347. package/plugin/worker/createWorker.ts +21 -24
  348. package/plugin/worker/html/createHtmlWorkerRenderState.tsx +31 -7
  349. package/plugin/worker/html/html-worker.development.tsx +16 -16
  350. package/plugin/worker/html/html-worker.production.tsx +3 -19
  351. package/plugin/worker/html/messageHandler.tsx +2 -4
  352. package/plugin/worker/rsc/handleRender.ts +15 -12
  353. package/plugin/worker/rsc/messageHandler.tsx +191 -120
  354. package/plugin/worker/rsc/rsc-worker.development.ts +148 -77
  355. package/plugin/worker/rsc/rsc-worker.production.ts +1 -1
  356. package/plugin/worker/rsc/state.ts +10 -0
  357. package/plugin/worker/sendMessage.ts +32 -14
  358. package/plugin/worker/types.ts +99 -64
  359. package/dist/plugin/react-client/server.d.ts.map +0 -1
  360. package/dist/plugin/react-client/server.js.map +0 -1
  361. package/dist/plugin/react-server/server.d.ts +0 -9
  362. package/dist/plugin/react-server/server.d.ts.map +0 -1
  363. package/dist/plugin/react-server/server.js.map +0 -1
  364. package/dist/plugin/transformer/plugin.client.js.map +0 -1
  365. package/dist/plugin/transformer/upgradeCssModuleCode.d.ts +0 -2
  366. package/dist/plugin/transformer/upgradeCssModuleCode.d.ts.map +0 -1
  367. package/dist/plugin/transformer/upgradeCssModuleCode.js +0 -40
  368. package/dist/plugin/worker/loader.d.ts +0 -5
  369. package/dist/plugin/worker/loader.d.ts.map +0 -1
  370. package/dist/plugin/worker/loader.js +0 -11
  371. package/dist/plugin/worker/loader.js.map +0 -1
  372. package/plugin/transformer/upgradeCssModuleCode.ts +0 -42
  373. package/plugin/worker/loader.ts +0 -7
@@ -7,17 +7,17 @@ import 'vite';
7
7
  import { resolveOptions } from '../config/resolveOptions.js';
8
8
  import { resolveUserConfig } from '../config/resolveUserConfig.js';
9
9
  import { resolveAutoDiscover } from '../config/autoDiscover/resolveAutoDiscover.js';
10
- import { configureWorkerRequestHandler } from './server.js';
10
+ import { configureWorkerRequestHandler } from './configureWorkerRequestHandler.js';
11
11
  import { configurePreviewServer } from '../react-static/configurePreviewServer.js';
12
12
  import { MessageChannel } from 'node:worker_threads';
13
13
 
14
- let userOptions;
15
- let userConfig;
16
- let configEnv;
17
- let root;
18
- let autoDiscoveredFiles;
19
- let hmrChannel = null;
20
14
  function reactClientPlugin(options) {
15
+ let userOptions;
16
+ let userConfig;
17
+ let configEnv;
18
+ let root;
19
+ let autoDiscoveredFiles;
20
+ let hmrChannel = null;
21
21
  const resolvedOptions = resolveOptions(options);
22
22
  if (resolvedOptions.type === "error") {
23
23
  throw resolvedOptions.error;
@@ -90,7 +90,6 @@ function reactClientPlugin(options) {
90
90
  if (!isPageFile) return;
91
91
  const [, value] = userOptions.normalizer(file);
92
92
  const affectedRoutes = autoDiscoveredFiles.routeMap.get(value) || [];
93
- console.log({ affectedRoutes });
94
93
  if (hmrChannel?.port1) {
95
94
  hmrChannel.port1.postMessage({
96
95
  type: "HMR_UPDATE",
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../plugin/react-client/plugin.ts"],"sourcesContent":["import { type ConfigEnv, type Plugin } from \"vite\";\nimport type {\n AutoDiscoveredFiles,\n ResolvedUserConfig,\n ResolvedUserOptions,\n StreamPluginOptions,\n} from \"../types.js\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport { resolveAutoDiscover } from \"../config/autoDiscover/resolveAutoDiscover.js\";\nimport { configureWorkerRequestHandler } from \"./server.js\";\nimport { configurePreviewServer } from \"../react-static/configurePreviewServer.js\";\nimport { MessageChannel } from \"node:worker_threads\";\n\nlet userOptions: ResolvedUserOptions;\nlet userConfig: ResolvedUserConfig;\nlet configEnv: ConfigEnv;\nlet root: string;\nlet autoDiscoveredFiles: AutoDiscoveredFiles;\nlet hmrChannel: MessageChannel | null = null;\n\nexport function reactClientPlugin(options: StreamPluginOptions): Plugin {\n const resolvedOptions = resolveOptions(options);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n root = userOptions.projectRoot;\n\n return {\n name: \"vite:react-client\",\n\n async config(config, viteConfigEnv) {\n configEnv = viteConfigEnv;\n if (\n typeof config.root === \"string\" &&\n config.root !== root &&\n config.root !== process.cwd() &&\n config.root !== \"\"\n ) {\n root = config.root;\n userOptions.projectRoot = root;\n }\n\n const autoDiscoverResult = await resolveAutoDiscover({\n config,\n configEnv,\n userOptions,\n condition: \"react-client\",\n });\n if (autoDiscoverResult.type === \"error\") {\n throw autoDiscoverResult.error;\n }\n autoDiscoveredFiles = autoDiscoverResult.autoDiscoveredFiles;\n\n const resolvedConfig = resolveUserConfig({\n condition: \"react-client\",\n config,\n configEnv,\n userOptions,\n autoDiscoveredFiles,\n });\n\n if (resolvedConfig.type === \"error\") {\n throw resolvedConfig.error;\n }\n\n userConfig = resolvedConfig.userConfig;\n return userConfig\n },\n async configurePreviewServer(server) {\n await configurePreviewServer({\n server,\n userOptions,\n });\n },\n async writeBundle(options, bundle) {\n if (userOptions.onEvent) {\n userOptions.onEvent({\n type: `build.writeBundle.${\n userConfig.build.ssr ? \"client\" : \"static-client\"\n }`,\n data: {\n pages: [...autoDiscoveredFiles.routeMap.keys()],\n options,\n bundle,\n },\n });\n }\n },\n // setup dev server\n async configureServer(server) {\n // Create HMR message channel\n hmrChannel = new MessageChannel();\n await configureWorkerRequestHandler({\n server,\n autoDiscoveredFiles,\n userOptions,\n hmrChannel,\n onMetrics: userOptions.onMetrics,\n });\n },\n\n async handleHotUpdate({ file, server, read, timestamp, ...ctx }) {\n try {\n // Check if the file is a page or props file\n const isPageFile = userOptions.autoDiscover.modulePattern(file);\n if (!isPageFile) return;\n\n // Get the route for this file\n const [, value] = userOptions.normalizer(file);\n\n // Find all routes affected by this file change\n const affectedRoutes = autoDiscoveredFiles.routeMap.get(value) || [];\n console.log({affectedRoutes})\n // Send HMR update directly to worker through MessageChannel\n if (hmrChannel?.port1) {\n hmrChannel.port1.postMessage({\n type: \"HMR_UPDATE\",\n path: file,\n timestamp,\n routes: affectedRoutes,\n });\n\n // Trigger a full page refresh for affected routes\n for (const route of affectedRoutes) {\n server.ws.send({\n type: \"full-reload\",\n path: route,\n });\n }\n }\n\n // Let Vite handle the HMR update\n return ctx.modules;\n } catch (error) {\n if (hmrChannel?.port1) {\n hmrChannel.port1.postMessage({\n type: \"HMR_ERROR\",\n path: file,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n return ctx.modules;\n }\n },\n };\n}\n"],"names":["options"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../plugin/react-client/plugin.ts"],"sourcesContent":["import { type ConfigEnv, type Plugin } from \"vite\";\nimport type {\n AutoDiscoveredFiles,\n InlineCssOpt,\n PagePropOpt,\n ResolvedUserConfig,\n ResolvedUserOptions,\n StreamPluginOptions,\n} from \"../types.js\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport { resolveAutoDiscover } from \"../config/autoDiscover/resolveAutoDiscover.js\";\nimport { configureWorkerRequestHandler } from \"./configureWorkerRequestHandler.js\";\nimport { configurePreviewServer } from \"../react-static/configurePreviewServer.js\";\nimport { MessageChannel } from \"node:worker_threads\";\n\nexport function reactClientPlugin<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n>(options: StreamPluginOptions<T, InlineCSS>): Plugin {\n let userOptions: ResolvedUserOptions<T, InlineCSS>;\n let userConfig: ResolvedUserConfig;\n let configEnv: ConfigEnv;\n let root: string;\n let autoDiscoveredFiles: AutoDiscoveredFiles;\n let hmrChannel: MessageChannel | null = null;\n\n const resolvedOptions = resolveOptions(options);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n root = userOptions.projectRoot;\n\n return {\n name: \"vite:react-client\",\n\n async config(config, viteConfigEnv) {\n configEnv = viteConfigEnv;\n if (\n typeof config.root === \"string\" &&\n config.root !== root &&\n config.root !== process.cwd() &&\n config.root !== \"\"\n ) {\n root = config.root;\n userOptions.projectRoot = root;\n }\n\n const autoDiscoverResult = await resolveAutoDiscover({\n config,\n configEnv,\n userOptions,\n condition: \"react-client\",\n });\n if (autoDiscoverResult.type === \"error\") {\n throw autoDiscoverResult.error;\n }\n autoDiscoveredFiles = autoDiscoverResult.autoDiscoveredFiles;\n\n const resolvedConfig = resolveUserConfig<T, InlineCSS>({\n condition: \"react-client\",\n config,\n configEnv,\n userOptions,\n autoDiscoveredFiles,\n });\n\n if (resolvedConfig.type === \"error\") {\n throw resolvedConfig.error;\n }\n\n userConfig = resolvedConfig.userConfig;\n return userConfig;\n },\n async configurePreviewServer(server) {\n await configurePreviewServer<T, InlineCSS>({\n server,\n userOptions,\n });\n },\n async writeBundle(options, bundle) {\n if (userOptions.onEvent) {\n userOptions.onEvent({\n type: `build.writeBundle.${\n userConfig.build.ssr ? \"client\" : \"static-client\"\n }`,\n data: {\n pages: [...autoDiscoveredFiles.routeMap.keys()],\n options,\n bundle,\n },\n });\n }\n },\n // setup dev server\n async configureServer(server) {\n // Create HMR message channel\n hmrChannel = new MessageChannel();\n await configureWorkerRequestHandler<T, InlineCSS>({\n server,\n autoDiscoveredFiles,\n userOptions,\n hmrChannel,\n onMetrics: userOptions.onMetrics,\n });\n },\n\n async handleHotUpdate({ file, server, read, timestamp, ...ctx }) {\n try {\n // Check if the file is a page or props file\n const isPageFile = userOptions.autoDiscover.modulePattern(file);\n if (!isPageFile) return;\n\n // Get the route for this file\n const [, value] = userOptions.normalizer(file);\n\n // Find all routes affected by this file change\n const affectedRoutes = autoDiscoveredFiles.routeMap.get(value) || [];\n\n // Send HMR update directly to worker through MessageChannel\n if (hmrChannel?.port1) {\n hmrChannel.port1.postMessage({\n type: \"HMR_UPDATE\",\n path: file,\n timestamp,\n routes: affectedRoutes,\n });\n\n // Trigger a full page refresh for affected routes\n for (const route of affectedRoutes) {\n server.ws.send({\n type: \"full-reload\",\n path: route,\n });\n }\n }\n\n // Let Vite handle the HMR update\n return ctx.modules;\n } catch (error) {\n if (hmrChannel?.port1) {\n hmrChannel.port1.postMessage({\n type: \"HMR_ERROR\",\n path: file,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n return ctx.modules;\n }\n },\n };\n}\n"],"names":["options"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { ResolvedUserOptions } from "../../types.js";
2
2
  import type { ViteDevServer } from "vite";
3
3
  import type { AutoDiscoveredFiles } from "../../types.js";
4
- import type { MessageChannel, Worker } from "node:worker_threads";
4
+ import { MessageChannel, type Worker } from "node:worker_threads";
5
5
  export declare function restartWorker({ server, autoDiscoveredFiles, userOptions, hmrChannel, }: {
6
6
  server: ViteDevServer;
7
7
  autoDiscoveredFiles: AutoDiscoveredFiles;
@@ -1 +1 @@
1
- {"version":3,"file":"restartWorker.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/restartWorker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAI1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAMlE,wBAAsB,aAAa,CAAC,EAChC,MAAM,EACN,mBAAmB,EACnB,WAAW,EACX,UAAU,GACX,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,cAAc,CAAC;CAC5B,0BAiDA"}
1
+ {"version":3,"file":"restartWorker.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/restartWorker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAI1D,OAAO,EAAE,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAMlE,wBAAsB,aAAa,CAAC,EAChC,MAAM,EACN,mBAAmB,EACnB,WAAW,EACX,UAAU,GACX,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,cAAc,CAAC;CAC5B,0BA6DF"}
@@ -5,6 +5,7 @@
5
5
  */
6
6
  import { createWorker } from '../worker/createWorker.js';
7
7
  import { serializedOptions, serializedDevServerConfig } from '../helpers/serializeUserOptions.js';
8
+ import { MessageChannel } from 'node:worker_threads';
8
9
  import { DEFAULT_CONFIG } from '../config/defaults.js';
9
10
 
10
11
  let currentWorker = null;
@@ -16,7 +17,7 @@ async function restartWorker({
16
17
  hmrChannel
17
18
  }) {
18
19
  if (isRestarting) {
19
- throw new Error("Worker is restarting");
20
+ return currentWorker;
20
21
  }
21
22
  isRestarting = true;
22
23
  try {
@@ -27,6 +28,10 @@ async function restartWorker({
27
28
  const routeCount = autoDiscoveredFiles.urlMap.size;
28
29
  const hmrBuffer = 20;
29
30
  const maxListeners = routeCount + hmrBuffer;
31
+ const workerHmrChannel = new MessageChannel();
32
+ hmrChannel.port1.addEventListener("message", (event) => {
33
+ workerHmrChannel.port1.postMessage(event.data);
34
+ });
30
35
  const workerResult = await createWorker({
31
36
  projectRoot: server.config.root,
32
37
  workerPath: userOptions.rscWorkerPath,
@@ -35,11 +40,11 @@ async function restartWorker({
35
40
  maxListeners,
36
41
  envPrefix: typeof server.config.envPrefix === "string" ? server.config.envPrefix : Array.isArray(server.config.envPrefix) ? server.config.envPrefix[0] : DEFAULT_CONFIG.ENV_PREFIX,
37
42
  workerData: {
38
- hmrPort: hmrChannel.port2,
43
+ hmrPort: workerHmrChannel.port2,
39
44
  resolvedConfig: serializedDevServerConfig(server.config),
40
45
  userOptions: serializedOptions(userOptions, autoDiscoveredFiles)
41
46
  },
42
- transferList: [hmrChannel.port2]
47
+ transferList: [workerHmrChannel.port2]
43
48
  });
44
49
  if (workerResult.type === "success") {
45
50
  currentWorker = workerResult.worker;
@@ -50,6 +55,7 @@ async function restartWorker({
50
55
  server.config.logger.error("Failed to start rsc-worker", {
51
56
  error: workerResult.error
52
57
  });
58
+ throw workerResult.error;
53
59
  }
54
60
  } finally {
55
61
  isRestarting = false;
@@ -1 +1 @@
1
- {"version":3,"file":"restartWorker.js","sources":["../../../plugin/react-client/restartWorker.ts"],"sourcesContent":["import type { ResolvedUserOptions } from \"../../types.js\";\n\nimport type { ViteDevServer } from \"vite\";\nimport type { AutoDiscoveredFiles } from \"../../types.js\";\nimport { createWorker } from \"../worker/createWorker.js\";\nimport { serializedDevServerConfig } from \"../helpers/serializeUserOptions.js\";\nimport { serializedOptions } from \"../helpers/serializeUserOptions.js\";\nimport type { MessageChannel, Worker } from \"node:worker_threads\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\n\nlet currentWorker: Worker | null = null;\nlet isRestarting = false;\n\nexport async function restartWorker({\n server,\n autoDiscoveredFiles,\n userOptions,\n hmrChannel,\n } :{\n server: ViteDevServer,\n autoDiscoveredFiles: AutoDiscoveredFiles,\n userOptions: ResolvedUserOptions,\n hmrChannel: MessageChannel,\n }) {\n if (isRestarting) {\n throw new Error('Worker is restarting')\n }\n isRestarting = true;\n \n try {\n // Terminate the current worker if it exists\n if (currentWorker) {\n currentWorker.removeAllListeners();\n currentWorker = null;\n }\n const routeCount = autoDiscoveredFiles.urlMap.size;\n const hmrBuffer = 20; // Buffer for HMR and other operations\n const maxListeners = routeCount + hmrBuffer;\n const workerResult = await createWorker({\n projectRoot: server.config.root,\n workerPath: userOptions.rscWorkerPath,\n reverseCondition: \"react-server\",\n currentCondition: \"react-client\",\n maxListeners: maxListeners,\n envPrefix:\n typeof server.config.envPrefix === \"string\"\n ? server.config.envPrefix\n : Array.isArray(server.config.envPrefix)\n ? server.config.envPrefix[0]\n : DEFAULT_CONFIG.ENV_PREFIX,\n workerData: {\n hmrPort: hmrChannel.port2,\n resolvedConfig: serializedDevServerConfig(server.config),\n userOptions: serializedOptions(userOptions, autoDiscoveredFiles),\n },\n transferList: [hmrChannel.port2],\n });\n \n if (workerResult.type === \"success\") {\n currentWorker = workerResult.worker;\n if(userOptions.verbose) server.config.logger.info(\n `[react-client] Set max listeners to ${maxListeners} for ${routeCount} routes`\n );\n } else if (workerResult.type === \"error\") {\n server.config.logger.error(\"Failed to start rsc-worker\", {\n error: workerResult.error,\n });\n }\n } finally {\n isRestarting = false;\n }\n return currentWorker;\n }"],"names":[],"mappings":";;;;;;;;;AAUA,IAAI,aAA+B,GAAA,IAAA;AACnC,IAAI,YAAe,GAAA,KAAA;AAEnB,eAAsB,aAAc,CAAA;AAAA,EAChC,MAAA;AAAA,EACA,mBAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAKG,EAAA;AACD,EAAA,IAAI,YAAc,EAAA;AAChB,IAAM,MAAA,IAAI,MAAM,sBAAsB,CAAA;AAAA;AAExC,EAAe,YAAA,GAAA,IAAA;AAEf,EAAI,IAAA;AAEF,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,aAAA,CAAc,kBAAmB,EAAA;AACjC,MAAgB,aAAA,GAAA,IAAA;AAAA;AAElB,IAAM,MAAA,UAAA,GAAa,oBAAoB,MAAO,CAAA,IAAA;AAC9C,IAAA,MAAM,SAAY,GAAA,EAAA;AAClB,IAAA,MAAM,eAAe,UAAa,GAAA,SAAA;AAClC,IAAM,MAAA,YAAA,GAAe,MAAM,YAAa,CAAA;AAAA,MACtC,WAAA,EAAa,OAAO,MAAO,CAAA,IAAA;AAAA,MAC3B,YAAY,WAAY,CAAA,aAAA;AAAA,MACxB,gBAAkB,EAAA,cAAA;AAAA,MAClB,gBAAkB,EAAA,cAAA;AAAA,MAClB,YAAA;AAAA,MACA,SAAA,EACE,OAAO,MAAO,CAAA,MAAA,CAAO,cAAc,QAC/B,GAAA,MAAA,CAAO,OAAO,SACd,GAAA,KAAA,CAAM,QAAQ,MAAO,CAAA,MAAA,CAAO,SAAS,CACrC,GAAA,MAAA,CAAO,OAAO,SAAU,CAAA,CAAC,IACzB,cAAe,CAAA,UAAA;AAAA,MACrB,UAAY,EAAA;AAAA,QACV,SAAS,UAAW,CAAA,KAAA;AAAA,QACpB,cAAA,EAAgB,yBAA0B,CAAA,MAAA,CAAO,MAAM,CAAA;AAAA,QACvD,WAAA,EAAa,iBAAkB,CAAA,WAAA,EAAa,mBAAmB;AAAA,OACjE;AAAA,MACA,YAAA,EAAc,CAAC,UAAA,CAAW,KAAK;AAAA,KAChC,CAAA;AAED,IAAI,IAAA,YAAA,CAAa,SAAS,SAAW,EAAA;AACnC,MAAA,aAAA,GAAgB,YAAa,CAAA,MAAA;AAC7B,MAAA,IAAG,WAAY,CAAA,OAAA,EAAgB,MAAA,CAAA,MAAA,CAAO,MAAO,CAAA,IAAA;AAAA,QAC3C,CAAA,oCAAA,EAAuC,YAAY,CAAA,KAAA,EAAQ,UAAU,CAAA,OAAA;AAAA,OACvE;AAAA,KACF,MAAA,IAAW,YAAa,CAAA,IAAA,KAAS,OAAS,EAAA;AACxC,MAAO,MAAA,CAAA,MAAA,CAAO,MAAO,CAAA,KAAA,CAAM,4BAA8B,EAAA;AAAA,QACvD,OAAO,YAAa,CAAA;AAAA,OACrB,CAAA;AAAA;AACH,GACA,SAAA;AACA,IAAe,YAAA,GAAA,KAAA;AAAA;AAEjB,EAAO,OAAA,aAAA;AACT;;;;"}
1
+ {"version":3,"file":"restartWorker.js","sources":["../../../plugin/react-client/restartWorker.ts"],"sourcesContent":["import type { ResolvedUserOptions } from \"../../types.js\";\n\nimport type { ViteDevServer } from \"vite\";\nimport type { AutoDiscoveredFiles } from \"../../types.js\";\nimport { createWorker } from \"../worker/createWorker.js\";\nimport { serializedDevServerConfig } from \"../helpers/serializeUserOptions.js\";\nimport { serializedOptions } from \"../helpers/serializeUserOptions.js\";\nimport { MessageChannel, type Worker } from \"node:worker_threads\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\n\nlet currentWorker: Worker | null = null;\nlet isRestarting = false;\n\nexport async function restartWorker({\n server,\n autoDiscoveredFiles,\n userOptions,\n hmrChannel,\n } :{\n server: ViteDevServer,\n autoDiscoveredFiles: AutoDiscoveredFiles,\n userOptions: ResolvedUserOptions,\n hmrChannel: MessageChannel,\n }) {\n if (isRestarting) {\n return currentWorker;\n }\n isRestarting = true;\n \n try {\n // Terminate the current worker if it exists\n if (currentWorker) {\n currentWorker.removeAllListeners();\n currentWorker = null;\n }\n \n const routeCount = autoDiscoveredFiles.urlMap.size;\n const hmrBuffer = 20; // Buffer for HMR and other operations\n const maxListeners = routeCount + hmrBuffer;\n\n // Create a new MessageChannel for this worker\n const workerHmrChannel = new MessageChannel();\n \n // Forward messages from the plugin's HMR channel to the worker's channel\n hmrChannel.port1.addEventListener('message', (event: Event) => {\n workerHmrChannel.port1.postMessage((event as MessageEvent).data);\n });\n \n const workerResult = await createWorker({\n projectRoot: server.config.root,\n workerPath: userOptions.rscWorkerPath,\n reverseCondition: \"react-server\",\n currentCondition: \"react-client\",\n maxListeners: maxListeners,\n envPrefix:\n typeof server.config.envPrefix === \"string\"\n ? server.config.envPrefix\n : Array.isArray(server.config.envPrefix)\n ? server.config.envPrefix[0]\n : DEFAULT_CONFIG.ENV_PREFIX,\n workerData: {\n hmrPort: workerHmrChannel.port2,\n resolvedConfig: serializedDevServerConfig(server.config),\n userOptions: serializedOptions(userOptions, autoDiscoveredFiles),\n },\n transferList: [workerHmrChannel.port2],\n });\n \n if (workerResult.type === \"success\") {\n currentWorker = workerResult.worker;\n if(userOptions.verbose) server.config.logger.info(\n `[react-client] Set max listeners to ${maxListeners} for ${routeCount} routes`\n );\n } else if (workerResult.type === \"error\") {\n server.config.logger.error(\"Failed to start rsc-worker\", {\n error: workerResult.error,\n });\n throw workerResult.error;\n }\n } finally {\n isRestarting = false;\n }\n \n return currentWorker;\n}"],"names":[],"mappings":";;;;;;;;;;AAUA,IAAI,aAA+B,GAAA,IAAA;AACnC,IAAI,YAAe,GAAA,KAAA;AAEnB,eAAsB,aAAc,CAAA;AAAA,EAChC,MAAA;AAAA,EACA,mBAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAKG,EAAA;AACD,EAAA,IAAI,YAAc,EAAA;AAChB,IAAO,OAAA,aAAA;AAAA;AAET,EAAe,YAAA,GAAA,IAAA;AAEf,EAAI,IAAA;AAEF,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,aAAA,CAAc,kBAAmB,EAAA;AACjC,MAAgB,aAAA,GAAA,IAAA;AAAA;AAGlB,IAAM,MAAA,UAAA,GAAa,oBAAoB,MAAO,CAAA,IAAA;AAC9C,IAAA,MAAM,SAAY,GAAA,EAAA;AAClB,IAAA,MAAM,eAAe,UAAa,GAAA,SAAA;AAGlC,IAAM,MAAA,gBAAA,GAAmB,IAAI,cAAe,EAAA;AAG5C,IAAA,UAAA,CAAW,KAAM,CAAA,gBAAA,CAAiB,SAAW,EAAA,CAAC,KAAiB,KAAA;AAC7D,MAAiB,gBAAA,CAAA,KAAA,CAAM,WAAa,CAAA,KAAA,CAAuB,IAAI,CAAA;AAAA,KAChE,CAAA;AAED,IAAM,MAAA,YAAA,GAAe,MAAM,YAAa,CAAA;AAAA,MACtC,WAAA,EAAa,OAAO,MAAO,CAAA,IAAA;AAAA,MAC3B,YAAY,WAAY,CAAA,aAAA;AAAA,MACxB,gBAAkB,EAAA,cAAA;AAAA,MAClB,gBAAkB,EAAA,cAAA;AAAA,MAClB,YAAA;AAAA,MACA,SAAA,EACE,OAAO,MAAO,CAAA,MAAA,CAAO,cAAc,QAC/B,GAAA,MAAA,CAAO,OAAO,SACd,GAAA,KAAA,CAAM,QAAQ,MAAO,CAAA,MAAA,CAAO,SAAS,CACrC,GAAA,MAAA,CAAO,OAAO,SAAU,CAAA,CAAC,IACzB,cAAe,CAAA,UAAA;AAAA,MACrB,UAAY,EAAA;AAAA,QACV,SAAS,gBAAiB,CAAA,KAAA;AAAA,QAC1B,cAAA,EAAgB,yBAA0B,CAAA,MAAA,CAAO,MAAM,CAAA;AAAA,QACvD,WAAA,EAAa,iBAAkB,CAAA,WAAA,EAAa,mBAAmB;AAAA,OACjE;AAAA,MACA,YAAA,EAAc,CAAC,gBAAA,CAAiB,KAAK;AAAA,KACtC,CAAA;AAED,IAAI,IAAA,YAAA,CAAa,SAAS,SAAW,EAAA;AACnC,MAAA,aAAA,GAAgB,YAAa,CAAA,MAAA;AAC7B,MAAA,IAAG,WAAY,CAAA,OAAA,EAAgB,MAAA,CAAA,MAAA,CAAO,MAAO,CAAA,IAAA;AAAA,QAC3C,CAAA,oCAAA,EAAuC,YAAY,CAAA,KAAA,EAAQ,UAAU,CAAA,OAAA;AAAA,OACvE;AAAA,KACF,MAAA,IAAW,YAAa,CAAA,IAAA,KAAS,OAAS,EAAA;AACxC,MAAO,MAAA,CAAA,MAAA,CAAO,MAAO,CAAA,KAAA,CAAM,4BAA8B,EAAA;AAAA,QACvD,OAAO,YAAa,CAAA;AAAA,OACrB,CAAA;AACD,MAAA,MAAM,YAAa,CAAA,KAAA;AAAA;AACrB,GACA,SAAA;AACA,IAAe,YAAA,GAAA,KAAA;AAAA;AAGjB,EAAO,OAAA,aAAA;AACX;;;;"}
@@ -0,0 +1,9 @@
1
+ import type { Manifest, ViteDevServer } from "vite";
2
+ import type { AutoDiscoveredFiles, InlineCssOpt, PagePropOpt, ResolvedUserOptions } from "../types.js";
3
+ export declare function configureReactServer<T extends PagePropOpt = PagePropOpt, InlineCSS extends InlineCssOpt = InlineCssOpt>({ server, autoDiscoveredFiles, userOptions: _userOptions, serverManifest, }: {
4
+ server: ViteDevServer;
5
+ autoDiscoveredFiles: AutoDiscoveredFiles;
6
+ userOptions: ResolvedUserOptions<T, InlineCSS>;
7
+ serverManifest: Manifest;
8
+ }): Promise<void>;
9
+ //# sourceMappingURL=configureReactServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configureReactServer.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/configureReactServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAWrB,wBAAsB,oBAAoB,CACxC,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,SAAS,SAAS,YAAY,GAAG,YAAY,EAC7C,EACA,MAAM,EACN,mBAAmB,EACnB,WAAW,EAAE,YAAY,EACzB,cAAc,GACf,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC/C,cAAc,EAAE,QAAQ,CAAC;CAC1B,iBA0JA"}
@@ -10,7 +10,8 @@ import { createHandler } from '../helpers/createHandler.js';
10
10
  import React__default from 'react';
11
11
  import { requestInfo } from '../helpers/requestInfo.js';
12
12
  import { getRouteFiles } from '../helpers/getRouteFiles.js';
13
- import { toError } from '../error/toError.js';
13
+ import { logError } from '../error/toError.js';
14
+ import { handleServerAction } from './handleServerAction.js';
14
15
 
15
16
  async function configureReactServer({
16
17
  server,
@@ -27,10 +28,24 @@ async function configureReactServer({
27
28
  projectRoot: _projectRoot,
28
29
  ...handlerUserOptions
29
30
  } = _userOptions;
30
- const handlerOptions = Object.assign({}, handlerUserOptions, {
31
+ const handlerOptions = {
32
+ ...handlerUserOptions,
31
33
  moduleBaseURL: server.config.base,
32
- projectRoot: server.config.root
33
- });
34
+ projectRoot: server.config.root,
35
+ Html: React__default.Fragment,
36
+ onEvent: createEventHandler(onEvent),
37
+ css: handlerUserOptions.css
38
+ };
39
+ const define = {
40
+ ...server.config.define,
41
+ "process.env.NODE_ENV": JSON.stringify(
42
+ process.env["NODE_ENV"] || "development"
43
+ )
44
+ };
45
+ server.config = {
46
+ ...server.config,
47
+ define
48
+ };
34
49
  server.ws.on("restart", (path) => {
35
50
  server.config.logger.info(
36
51
  "[vite-plugin-react-server] 🔧 Plugin changed, preparing for restart:",
@@ -51,7 +66,10 @@ async function configureReactServer({
51
66
  if (!req.url) {
52
67
  return next();
53
68
  }
54
- const info = requestInfo(req, handlerOptions, "");
69
+ const info = requestInfo(req, handlerOptions, "", server.config.logger);
70
+ if (info.isServerActionRequest) {
71
+ return handleServerAction(req, res, server, handlerOptions);
72
+ }
55
73
  if (!info.isRscRequest) return next();
56
74
  try {
57
75
  const routeFiles = await getRouteFiles(
@@ -98,7 +116,7 @@ async function configureReactServer({
98
116
  throw cssFilesResult.error;
99
117
  }
100
118
  const { PageComponent, pageProps } = pageAndPropsResult;
101
- const rscResult = await createHandler({
119
+ const rscResult = createHandler({
102
120
  ...handlerOptions,
103
121
  PageComponent,
104
122
  pageProps,
@@ -123,7 +141,7 @@ async function configureReactServer({
123
141
  activeStreams.delete(res);
124
142
  });
125
143
  } catch (error) {
126
- server.config.logger.error(toError(error).message);
144
+ logError(error, server.config.logger);
127
145
  res.end();
128
146
  }
129
147
  });
@@ -142,4 +160,4 @@ async function configureReactServer({
142
160
  }
143
161
 
144
162
  export { configureReactServer };
145
- //# sourceMappingURL=server.js.map
163
+ //# sourceMappingURL=configureReactServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configureReactServer.js","sources":["../../../plugin/react-server/configureReactServer.ts"],"sourcesContent":["import type { Manifest, ViteDevServer } from \"vite\";\nimport type { ServerResponse } from \"http\";\nimport type {\n AutoDiscoveredFiles,\n InlineCssOpt,\n PagePropOpt,\n ResolvedUserOptions,\n} from \"../types.js\";\nimport { createEventHandler } from \"../helpers/createEventHandler.js\";\nimport { collectViteModuleGraphCss } from \"../helpers/collectViteModuleGraphCss.js\";\nimport { resolvePageAndProps } from \"../helpers/resolvePageAndProps.js\";\nimport { createHandler } from \"../helpers/createHandler.js\";\nimport React from \"react\";\nimport { requestInfo } from \"../helpers/requestInfo.js\";\nimport { getRouteFiles } from \"../helpers/getRouteFiles.js\";\nimport { logError } from \"../error/toError.js\";\nimport { handleServerAction } from \"./handleServerAction.js\";\n\nexport async function configureReactServer<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n>({\n server,\n autoDiscoveredFiles,\n userOptions: _userOptions,\n serverManifest,\n}: {\n server: ViteDevServer;\n autoDiscoveredFiles: AutoDiscoveredFiles;\n userOptions: ResolvedUserOptions<T, InlineCSS>;\n serverManifest: Manifest;\n}) {\n const activeStreams = new Set<ServerResponse>();\n const {\n Html: _UserHtmlComponent,\n onEvent,\n // remove these\n moduleBaseURL: _moduleBaseURL,\n projectRoot: _projectRoot,\n ...handlerUserOptions\n } = _userOptions;\n const handlerOptions = {\n ...handlerUserOptions,\n moduleBaseURL: server.config.base,\n projectRoot: server.config.root,\n Html: React.Fragment,\n onEvent: createEventHandler(onEvent),\n css: handlerUserOptions.css\n };\n\n // Set environment-specific configuration\n const define = {\n ...server.config.define,\n \"process.env.NODE_ENV\": JSON.stringify(\n process.env[\"NODE_ENV\"] || \"development\"\n ),\n };\n server.config = {\n ...server.config,\n define,\n };\n\n // Handle Vite server restarts\n server.ws.on(\"restart\", (path) => {\n server.config.logger.info(\n \"[vite-plugin-react-server] 🔧 Plugin changed, preparing for restart:\",\n path\n );\n\n // Close streams with restart message\n for (const res of activeStreams) {\n res.writeHead(503, {\n \"Content-Type\": \"text/x-component; charset=utf-8\",\n \"Retry-After\": \"1\",\n });\n res.end(\n `0:E{\"digest\":\"\",\"name\":\"Error\",\"message\":\"Server restarting...\",\"stack\":\"\",\"env\":\"Server\"}`\n );\n }\n activeStreams.clear();\n });\n\n server.middlewares.use(async (req, res, next) => {\n if (!req.url) {\n return next();\n }\n const info = requestInfo(req, handlerOptions, \"\", server.config.logger);\n\n // Handle server actions\n if (info.isServerActionRequest) {\n return handleServerAction(req, res, server, handlerOptions);\n }\n\n if (!info.isRscRequest) return next();\n try {\n const routeFiles = await getRouteFiles(\n info.route,\n autoDiscoveredFiles,\n handlerOptions\n );\n if (routeFiles.type === \"error\") {\n server.config.logger.error(routeFiles.error.message);\n return next();\n }\n const pagePath = routeFiles.page;\n const propsPath = routeFiles.props;\n\n // first load the page and props\n const pageAndPropsResult = await resolvePageAndProps({\n pagePath,\n propsPath,\n route: info.route,\n loader: server.ssrLoadModule,\n pageExportName: handlerOptions.pageExportName ?? \"default\",\n propsExportName: handlerOptions.propsExportName ?? \"default\",\n });\n if (pageAndPropsResult.type === \"error\") {\n throw pageAndPropsResult.error;\n }\n if (pageAndPropsResult.type === \"skip\") {\n return next();\n }\n\n const eventHandler = createEventHandler(onEvent);\n const cssFilesResult = await collectViteModuleGraphCss({\n moduleGraph: server.moduleGraph, // by having loaded the page and props, we can get them from the module graph\n parentUrl: pagePath,\n handlerOptions: {\n pagePath,\n loader: server.ssrLoadModule,\n // explicitly set for development server\n ...handlerOptions,\n },\n });\n if (cssFilesResult.type === \"skip\") {\n return next();\n }\n if (cssFilesResult.type === \"error\") {\n throw cssFilesResult.error;\n }\n const { PageComponent, pageProps } = pageAndPropsResult;\n // Create the headless RSC stream directly;\n const rscResult = createHandler({\n ...handlerOptions,\n PageComponent: PageComponent,\n pageProps: pageProps,\n logger: server.config.logger,\n loader: server.ssrLoadModule,\n Html: React.Fragment,\n onEvent: eventHandler,\n manifest: serverManifest,\n server,\n route: info.route,\n pagePath,\n propsPath,\n cssFiles: cssFilesResult.cssFiles ?? new Map(),\n globalCss: new Map(),\n });\n if (rscResult.type === \"success\") {\n // set headers\n res.setHeader(\"Content-Type\", \"text/x-component; charset=utf-8\");\n rscResult.stream!.pipe(res);\n }\n activeStreams.add(res);\n res.on(\"close\", () => {\n activeStreams.delete(res);\n });\n } catch (error) {\n logError(error, server.config.logger);\n res.end();\n }\n });\n // Listen for when the server actually starts\n server.httpServer?.once(\"listening\", () => {\n const address = server.httpServer?.address();\n if (address && typeof address !== \"string\") {\n const port = address.port;\n const host = server.config.server.host ?? \"localhost\";\n const protocol = server.config.server.https ? \"https\" : \"http\";\n handlerOptions.publicOrigin = `${protocol}://${host}:${port}`;\n if (handlerOptions.publicOrigin !== process.env.VITE_PUBLIC_ORIGIN) {\n process.env.VITE_PUBLIC_ORIGIN = handlerOptions.publicOrigin;\n }\n }\n });\n}\n"],"names":["React"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ViteDevServer } from "vite";
2
+ import type { InlineCssOpt, PagePropOpt, ResolvedUserOptions } from "../types.js";
3
+ import type { IncomingMessage, ServerResponse } from "http";
4
+ export declare function handleServerAction<T extends PagePropOpt, InlineCss extends InlineCssOpt>(req: IncomingMessage, res: ServerResponse, server: ViteDevServer, handlerOptions: ResolvedUserOptions<T, InlineCss>): Promise<void>;
5
+ //# sourceMappingURL=handleServerAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleServerAction.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/handleServerAction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAIrB,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE5D,wBAAsB,kBAAkB,CACtC,CAAC,SAAS,WAAW,EACrB,SAAS,SAAS,YAAY,EAE9B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,aAAa,EACrB,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,iBA8JlD"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * vite-plugin-react-server
3
+ * Copyright (c) Nico Brinkkemper
4
+ * MIT License
5
+ */
6
+ import { toError, logError } from '../error/toError.js';
7
+ import { join } from 'path';
8
+ import { ReactDOMServer } from '../vendor/vendor.server.js';
9
+
10
+ async function handleServerAction(req, res, server, handlerOptions) {
11
+ try {
12
+ if (handlerOptions.verbose) {
13
+ server.config.logger.info(
14
+ `[react-server] Handling server action request at ${req.url}`
15
+ );
16
+ }
17
+ let id;
18
+ let args;
19
+ try {
20
+ const chunks = [];
21
+ for await (const chunk of req) {
22
+ chunks.push(chunk);
23
+ }
24
+ const body = Buffer.concat(chunks).toString();
25
+ if (handlerOptions.verbose) {
26
+ server.config.logger.info(`[react-server] Request body: ${body}`);
27
+ }
28
+ const parsed = JSON.parse(body);
29
+ if (Array.isArray(parsed)) {
30
+ args = parsed;
31
+ id = req.url?.split("?")[0] ?? "";
32
+ if (handlerOptions.verbose) {
33
+ server.config.logger.info(
34
+ `[react-server] Using action ID from URL: ${id}`
35
+ );
36
+ }
37
+ } else if (parsed && typeof parsed === "object" && "id" in parsed) {
38
+ id = parsed.id;
39
+ args = parsed.args ?? [];
40
+ } else {
41
+ throw new Error("Invalid server action request format");
42
+ }
43
+ } catch (error) {
44
+ const err = toError(error);
45
+ throw new Error(`Failed to parse server action request`, {
46
+ cause: err
47
+ });
48
+ }
49
+ if (!id) {
50
+ throw new Error("Server action ID is required");
51
+ }
52
+ if (handlerOptions.verbose) {
53
+ server.config.logger.info(
54
+ `[react-server] Server action request for ${id} with args: ${JSON.stringify(
55
+ args
56
+ )}`
57
+ );
58
+ }
59
+ const [filePath, exportName] = id.split("#");
60
+ if (!filePath || !exportName) {
61
+ throw new Error(
62
+ `Invalid server action ID format: ${id}. Expected format: "path/to/file.ts#exportName"`
63
+ );
64
+ }
65
+ const actionPath = filePath.startsWith("/") ? filePath.slice(1) : filePath;
66
+ const fullPath = join(handlerOptions.projectRoot, actionPath);
67
+ if (handlerOptions.verbose) {
68
+ server.config.logger.info(
69
+ `[react-server] Resolved file path: id=${id}, actionPath=${actionPath}, projectRoot=${handlerOptions.projectRoot}, filePath=${fullPath}, exportName=${exportName}`
70
+ );
71
+ }
72
+ if (handlerOptions.verbose) {
73
+ server.config.logger.info(`[react-server] Loading module: ${fullPath}`);
74
+ }
75
+ const module = await server.ssrLoadModule(fullPath);
76
+ if (handlerOptions.verbose) {
77
+ server.config.logger.info(
78
+ `[react-server] Looking for action: ${exportName} in module with exports: ${Object.keys(
79
+ module
80
+ ).join(", ")}`
81
+ );
82
+ }
83
+ const action = module[exportName];
84
+ if (typeof action !== "function") {
85
+ if (handlerOptions.verbose) {
86
+ server.config.logger.error(
87
+ `[react-server] Action not found: ${exportName} in module with exports: ${Object.keys(
88
+ module
89
+ ).join(", ")}`
90
+ );
91
+ }
92
+ throw new Error(`Server action not found: ${id}`);
93
+ }
94
+ if (handlerOptions.verbose) {
95
+ server.config.logger.info(
96
+ `[react-server] Executing action with args: ${JSON.stringify(args)}`
97
+ );
98
+ }
99
+ const result = await action(...args);
100
+ if (handlerOptions.verbose) {
101
+ server.config.logger.info(
102
+ `[react-server] Action completed successfully with result: ${JSON.stringify(
103
+ result
104
+ )}`
105
+ );
106
+ }
107
+ res.setHeader("Content-Type", "text/x-component; charset=utf-8");
108
+ const { pipe } = ReactDOMServer.renderToPipeableStream(
109
+ {
110
+ type: "server-action-response",
111
+ returnValue: result
112
+ },
113
+ handlerOptions.moduleBasePath,
114
+ {
115
+ onError(error) {
116
+ logError(error, server.config.logger);
117
+ res.statusCode = 500;
118
+ res.end();
119
+ }
120
+ }
121
+ );
122
+ pipe(res);
123
+ } catch (error) {
124
+ logError(error, server.config.logger);
125
+ res.statusCode = 500;
126
+ res.setHeader("Content-Type", "text/x-component; charset=utf-8");
127
+ const { pipe } = ReactDOMServer.renderToPipeableStream(
128
+ {
129
+ type: "server-action-response",
130
+ error: toError(error).message
131
+ },
132
+ handlerOptions.moduleBasePath,
133
+ {
134
+ onError(error2) {
135
+ logError(error2, server.config.logger);
136
+ res.end();
137
+ }
138
+ }
139
+ );
140
+ pipe(res);
141
+ }
142
+ }
143
+
144
+ export { handleServerAction };
145
+ //# sourceMappingURL=handleServerAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleServerAction.js","sources":["../../../plugin/react-server/handleServerAction.ts"],"sourcesContent":["import type { ViteDevServer } from \"vite\";\nimport type {\n InlineCssOpt,\n PagePropOpt,\n ResolvedUserOptions,\n} from \"../types.js\";\nimport { logError, toError } from \"../error/toError.js\";\nimport { join } from \"path\";\nimport { ReactDOMServer } from \"../vendor/vendor.server.js\";\nimport type { IncomingMessage, ServerResponse } from \"http\";\n\nexport async function handleServerAction<\n T extends PagePropOpt,\n InlineCss extends InlineCssOpt\n>(\n req: IncomingMessage,\n res: ServerResponse,\n server: ViteDevServer,\n handlerOptions: ResolvedUserOptions<T, InlineCss>\n) {\n try {\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Handling server action request at ${req.url}`\n );\n }\n\n // Parse the request body - handle both formats:\n // 1. Direct args array: [\"arg1\", \"arg2\"]\n // 2. Object with id and args: { id: \"path/to/action\", args: [\"arg1\", \"arg2\"] }\n let id: string;\n let args: unknown[];\n try {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(chunk);\n }\n const body = Buffer.concat(chunks).toString();\n if (handlerOptions.verbose) {\n server.config.logger.info(`[react-server] Request body: ${body}`);\n }\n\n const parsed = JSON.parse(body);\n if (Array.isArray(parsed)) {\n // Format 1: Direct args array\n args = parsed;\n // Get the action ID from the request URL\n id = req.url?.split(\"?\")[0] ?? \"\";\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Using action ID from URL: ${id}`\n );\n }\n } else if (parsed && typeof parsed === \"object\" && \"id\" in parsed) {\n // Format 2: Object with id and args\n id = parsed.id;\n args = parsed.args ?? [];\n } else {\n throw new Error(\"Invalid server action request format\");\n }\n } catch (error: unknown) {\n const err = toError(error);\n throw new Error(`Failed to parse server action request`, {\n cause: err,\n });\n }\n\n if (!id) {\n throw new Error(\"Server action ID is required\");\n }\n\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Server action request for ${id} with args: ${JSON.stringify(\n args\n )}`\n );\n }\n\n // Parse the server action ID to get the file path and export name\n const [filePath, exportName] = id.split(\"#\");\n if (!filePath || !exportName) {\n throw new Error(\n `Invalid server action ID format: ${id}. Expected format: \"path/to/file.ts#exportName\"`\n );\n }\n\n // Convert the server action ID to a file path\n const actionPath = filePath.startsWith(\"/\") ? filePath.slice(1) : filePath;\n const fullPath = join(handlerOptions.projectRoot, actionPath);\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Resolved file path: id=${id}, actionPath=${actionPath}, projectRoot=${handlerOptions.projectRoot}, filePath=${fullPath}, exportName=${exportName}`\n );\n }\n\n // Load the server action module\n if (handlerOptions.verbose) {\n server.config.logger.info(`[react-server] Loading module: ${fullPath}`);\n }\n const module = await server.ssrLoadModule(fullPath);\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Looking for action: ${exportName} in module with exports: ${Object.keys(\n module\n ).join(\", \")}`\n );\n }\n const action = module[exportName];\n\n if (typeof action !== \"function\") {\n if (handlerOptions.verbose) {\n server.config.logger.error(\n `[react-server] Action not found: ${exportName} in module with exports: ${Object.keys(\n module\n ).join(\", \")}`\n );\n }\n throw new Error(`Server action not found: ${id}`);\n }\n\n // Execute the server action\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Executing action with args: ${JSON.stringify(args)}`\n );\n }\n const result = await action(...args);\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Action completed successfully with result: ${JSON.stringify(\n result\n )}`\n );\n }\n\n // Send the response\n res.setHeader(\"Content-Type\", \"text/x-component; charset=utf-8\");\n\n const { pipe } = ReactDOMServer.renderToPipeableStream(\n {\n type: \"server-action-response\",\n returnValue: result,\n },\n handlerOptions.moduleBasePath,\n {\n onError(error: Error) {\n logError(error, server.config.logger);\n res.statusCode = 500;\n res.end();\n },\n }\n );\n\n pipe(res);\n } catch (error) {\n logError(error, server.config.logger);\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"text/x-component; charset=utf-8\");\n\n const { pipe } = ReactDOMServer.renderToPipeableStream(\n {\n type: \"server-action-response\",\n error: toError(error).message,\n },\n handlerOptions.moduleBasePath,\n {\n onError(error: Error) {\n logError(error, server.config.logger);\n res.end();\n },\n }\n );\n\n pipe(res);\n }\n}\n"],"names":["error"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { type Plugin as VitePlugin } from "vite";
2
- import type { ReactStreamPluginMeta } from "../types.js";
2
+ import type { ReactStreamPluginMeta, PagePropOpt, InlineCssOpt } from "../types.js";
3
3
  import { type StreamPluginOptions } from "../types.js";
4
- export declare function reactServerPlugin(options: StreamPluginOptions): VitePlugin<{
4
+ export declare function reactServerPlugin<T extends PagePropOpt = PagePropOpt, InlineCSS extends InlineCssOpt = InlineCssOpt>(options: StreamPluginOptions<T, InlineCSS>): VitePlugin<{
5
5
  meta: ReactStreamPluginMeta;
6
6
  }>;
7
7
  //# sourceMappingURL=plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,MAAM,IAAI,UAAU,EAC1B,MAAM,MAAM,CAAC;AAGd,OAAO,KAAK,EAGV,qBAAqB,EAEtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAiBvD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,UAAU,CAAC;IAC1E,IAAI,EAAE,qBAAqB,CAAC;CAC7B,CAAC,CAuJD"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,MAAM,IAAI,UAAU,EAC1B,MAAM,MAAM,CAAC;AAGd,OAAO,KAAK,EAGV,qBAAqB,EAErB,WAAW,EACX,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAiBvD,wBAAgB,iBAAiB,CAC/B,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,SAAS,SAAS,YAAY,GAAG,YAAY,EAC7C,OAAO,EAAE,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC;IACxD,IAAI,EAAE,qBAAqB,CAAC;CAC7B,CAAC,CAuJD"}
@@ -9,7 +9,7 @@ import { resolveOptions } from '../config/resolveOptions.js';
9
9
  import { resolveUserConfig } from '../config/resolveUserConfig.js';
10
10
  import { resolveAutoDiscover } from '../config/autoDiscover/resolveAutoDiscover.js';
11
11
  import { getCondition } from '../config/getCondition.js';
12
- import { configureReactServer } from './server.js';
12
+ import { configureReactServer } from './configureReactServer.js';
13
13
  import { configurePreviewServer } from '../react-static/configurePreviewServer.js';
14
14
  import { getBundleManifest } from '../helpers/getBundleManifest.js';
15
15
 
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../plugin/react-server/plugin.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport {\n type ResolvedConfig,\n type UserConfig,\n type ViteDevServer,\n type Manifest,\n type Plugin as VitePlugin,\n} from \"vite\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport type {\n AutoDiscoveredFiles,\n BuildTiming,\n ReactStreamPluginMeta,\n ResolvedUserOptions,\n} from \"../types.js\";\nimport { type StreamPluginOptions } from \"../types.js\";\nimport {\n resolveAutoDiscover\n} from \"../config/autoDiscover/resolveAutoDiscover.js\";\nimport { getCondition } from \"../config/getCondition.js\";\nimport { configureReactServer } from \"./server.js\";\nimport { configurePreviewServer } from \"../react-static/configurePreviewServer.js\";\nimport { getBundleManifest } from \"../helpers/getBundleManifest.js\";\n\nlet resolvedConfig: ResolvedConfig | null = null;\n\nif (getCondition() !== \"react-server\") {\n throw new Error(\n \"Condition mismatch, should be react-server but got \" +\n process.env[\"NODE_OPTIONS\"]\n );\n}\nexport function reactServerPlugin(options: StreamPluginOptions): VitePlugin<{\n meta: ReactStreamPluginMeta;\n}> {\n const timing: BuildTiming = {\n start: performance.now(),\n };\n\n let autoDiscoveredFiles: AutoDiscoveredFiles;\n let userOptions: ResolvedUserOptions;\n let serverManifest: Manifest = {};\n\n const resolvedOptions = resolveOptions(options);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n \n\n return {\n name: \"vite:react-stream-server\",\n enforce: \"post\",\n api: {\n meta: { timing },\n }, \n configResolved(_resolvedConfig) {\n resolvedConfig = _resolvedConfig;\n if (\n userOptions.projectRoot != resolvedConfig.root &&\n typeof userOptions.projectRoot === \"string\" &&\n userOptions.projectRoot !== \"\"\n ) {\n throw new Error(\n \"[RSC] Project root is not the current working directory, please set projectRoot in your config.\\n\" +\n \" projectRoot: \" + userOptions.projectRoot + \"\\n\" +\n \" resolvedConfig.root: \" + resolvedConfig.root\n );\n }\n timing.configResolved = performance.now();\n\n // Verify transformer runs first, preserver runs last\n const plugins = resolvedConfig.plugins;\n const transformerIndex = plugins.findIndex(\n (p) => p.name === \"vite:react-server-transform\"\n );\n const preserverIndex = plugins.findIndex(\n (p) => p.name === \"vite-plugin-react-server:preserve-directives\"\n );\n\n if (transformerIndex === -1) {\n throw new Error(\"Transformer plugin not installed\");\n }\n if (preserverIndex < transformerIndex) {\n throw new Error(\n \"Transformer plugin isn't installed or isn't running before preserver\"\n );\n }\n },\n\n async configurePreviewServer(server) {\n await configurePreviewServer({\n server,\n userOptions,\n });\n },\n async configureServer(server: ViteDevServer) {\n configureReactServer({\n server,\n autoDiscoveredFiles,\n userOptions,\n serverManifest,\n });\n },\n async config(config, configEnv): Promise<UserConfig> {\n const autoDiscoverResult = await resolveAutoDiscover({\n config,\n configEnv,\n userOptions,\n condition: \"react-server\",\n });\n if (autoDiscoverResult.type === \"error\") {\n throw autoDiscoverResult.error;\n }\n autoDiscoveredFiles = autoDiscoverResult.autoDiscoveredFiles;\n\n const resolvedConfig = resolveUserConfig({\n condition: \"react-server\",\n config,\n configEnv,\n userOptions,\n autoDiscoveredFiles,\n });\n\n if (resolvedConfig.type === \"error\") {\n console.error(\n \"[react-server-plugin] Failed to resolve config:\",\n resolvedConfig.error\n );\n throw resolvedConfig.error;\n }\n\n return resolvedConfig.userConfig;\n },\n async writeBundle(options, bundle) {\n if (userOptions.onEvent) {\n userOptions.onEvent({\n type: \"build.writeBundle.server\",\n data: {\n pages: Array.from(autoDiscoveredFiles?.urlMap.keys() ?? []),\n options,\n bundle,\n },\n });\n }\n },\n async buildStart() {\n if (!timing.buildStart) {\n timing.buildStart = performance.now();\n } else {\n console.log(\"Build already started\");\n }\n },\n async generateBundle(_options, bundle) {\n // Create manifest entries for each chunk\n serverManifest = getBundleManifest<false>({\n bundle,\n normalizer: userOptions.normalizer,\n });\n },\n async handleHotUpdate({ file, server, read, timestamp, ...ctx }) {\n try {\n // Invalidate the module in Vite's cache for both client and SSR\n if (server.moduleGraph) {\n const mod = server.moduleGraph.getModuleById(file);\n if (mod) {\n // Invalidate the parent module which will handle both client and SSR\n server.moduleGraph.invalidateModule(mod);\n \n // Force a reload of the module\n const newMod = await server.moduleGraph.ensureEntryFromUrl(file, false);\n if (newMod) {\n server.moduleGraph.invalidateModule(newMod);\n }\n }\n }\n \n // Let Vite handle the HMR update\n return ctx.modules;\n } catch (error) {\n console.error(\"[react-server] HMR Error:\", error);\n return ctx.modules;\n }\n },\n };\n}\n"],"names":["resolvedConfig","options"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../plugin/react-server/plugin.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport {\n type ResolvedConfig,\n type UserConfig,\n type ViteDevServer,\n type Manifest,\n type Plugin as VitePlugin,\n} from \"vite\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport type {\n AutoDiscoveredFiles,\n BuildTiming,\n ReactStreamPluginMeta,\n ResolvedUserOptions,\n PagePropOpt,\n InlineCssOpt,\n} from \"../types.js\";\nimport { type StreamPluginOptions } from \"../types.js\";\nimport {\n resolveAutoDiscover\n} from \"../config/autoDiscover/resolveAutoDiscover.js\";\nimport { getCondition } from \"../config/getCondition.js\";\nimport { configureReactServer } from \"./configureReactServer.js\";\nimport { configurePreviewServer } from \"../react-static/configurePreviewServer.js\";\nimport { getBundleManifest } from \"../helpers/getBundleManifest.js\";\n\nlet resolvedConfig: ResolvedConfig | null = null;\n\nif (getCondition() !== \"react-server\") {\n throw new Error(\n \"Condition mismatch, should be react-server but got \" +\n process.env[\"NODE_OPTIONS\"]\n );\n}\nexport function reactServerPlugin<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n>(options: StreamPluginOptions<T, InlineCSS>): VitePlugin<{\n meta: ReactStreamPluginMeta;\n}> {\n const timing: BuildTiming = {\n start: performance.now(),\n };\n\n let autoDiscoveredFiles: AutoDiscoveredFiles;\n let userOptions: ResolvedUserOptions<T, InlineCSS>;\n let serverManifest: Manifest = {};\n\n const resolvedOptions = resolveOptions(options);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n \n\n return {\n name: \"vite:react-stream-server\",\n enforce: \"post\",\n api: {\n meta: { timing },\n }, \n configResolved(_resolvedConfig) {\n resolvedConfig = _resolvedConfig;\n if (\n userOptions.projectRoot != resolvedConfig.root &&\n typeof userOptions.projectRoot === \"string\" &&\n userOptions.projectRoot !== \"\"\n ) {\n throw new Error(\n \"[RSC] Project root is not the current working directory, please set projectRoot in your config.\\n\" +\n \" projectRoot: \" + userOptions.projectRoot + \"\\n\" +\n \" resolvedConfig.root: \" + resolvedConfig.root\n );\n }\n timing.configResolved = performance.now();\n\n // Verify transformer runs first, preserver runs last\n const plugins = resolvedConfig.plugins;\n const transformerIndex = plugins.findIndex(\n (p) => p.name === \"vite:react-server-transform\"\n );\n const preserverIndex = plugins.findIndex(\n (p) => p.name === \"vite-plugin-react-server:preserve-directives\"\n );\n\n if (transformerIndex === -1) {\n throw new Error(\"Transformer plugin not installed\");\n }\n if (preserverIndex < transformerIndex) {\n throw new Error(\n \"Transformer plugin isn't installed or isn't running before preserver\"\n );\n }\n },\n\n async configurePreviewServer(server) {\n await configurePreviewServer({\n server,\n userOptions,\n });\n },\n async configureServer(server: ViteDevServer) {\n configureReactServer({\n server,\n autoDiscoveredFiles,\n userOptions,\n serverManifest,\n });\n },\n async config(config, configEnv): Promise<UserConfig> {\n const autoDiscoverResult = await resolveAutoDiscover({\n config,\n configEnv,\n userOptions,\n condition: \"react-server\",\n });\n if (autoDiscoverResult.type === \"error\") {\n throw autoDiscoverResult.error;\n }\n autoDiscoveredFiles = autoDiscoverResult.autoDiscoveredFiles;\n\n const resolvedConfig = resolveUserConfig({\n condition: \"react-server\",\n config,\n configEnv,\n userOptions,\n autoDiscoveredFiles,\n });\n\n if (resolvedConfig.type === \"error\") {\n console.error(\n \"[react-server-plugin] Failed to resolve config:\",\n resolvedConfig.error\n );\n throw resolvedConfig.error;\n }\n\n return resolvedConfig.userConfig;\n },\n async writeBundle(options, bundle) {\n if (userOptions.onEvent) {\n userOptions.onEvent({\n type: \"build.writeBundle.server\",\n data: {\n pages: Array.from(autoDiscoveredFiles?.urlMap.keys() ?? []),\n options,\n bundle,\n },\n });\n }\n },\n async buildStart() {\n if (!timing.buildStart) {\n timing.buildStart = performance.now();\n } else {\n console.log(\"Build already started\");\n }\n },\n async generateBundle(_options, bundle) {\n // Create manifest entries for each chunk\n serverManifest = getBundleManifest<false>({\n bundle,\n normalizer: userOptions.normalizer,\n });\n },\n async handleHotUpdate({ file, server, read, timestamp, ...ctx }) {\n try {\n // Invalidate the module in Vite's cache for both client and SSR\n if (server.moduleGraph) {\n const mod = server.moduleGraph.getModuleById(file);\n if (mod) {\n // Invalidate the parent module which will handle both client and SSR\n server.moduleGraph.invalidateModule(mod);\n \n // Force a reload of the module\n const newMod = await server.moduleGraph.ensureEntryFromUrl(file, false);\n if (newMod) {\n server.moduleGraph.invalidateModule(newMod);\n }\n }\n }\n \n // Let Vite handle the HMR update\n return ctx.modules;\n } catch (error) {\n console.error(\"[react-server] HMR Error:\", error);\n return ctx.modules;\n }\n },\n };\n}\n"],"names":["resolvedConfig","options"],"mappings":"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"}
@@ -9,14 +9,14 @@
9
9
  * 3. Provides a clean interface for HTML handling
10
10
  */
11
11
  import { PassThrough } from "node:stream";
12
- import type { CreateHandlerOptions, StreamMetrics } from "../types.js";
12
+ import type { CreateHandlerOptions, StreamMetrics, PagePropOpt, InlineCssOpt } from "../types.js";
13
13
  /**
14
14
  * Collects RSC content from the rscFull stream
15
15
  *
16
16
  * @param rscFull The stream containing the RSC content
17
17
  * @returns A promise that resolves with the complete RSC content
18
18
  */
19
- export declare function collectHtmlWorkerContent(rscStream: PassThrough, handlerOptions: CreateHandlerOptions): Promise<{
19
+ export declare function collectHtmlWorkerContent<T extends PagePropOpt = PagePropOpt, InlineCSS extends InlineCssOpt = InlineCssOpt>(rscStream: PassThrough, handlerOptions: CreateHandlerOptions<T, InlineCSS>): Promise<{
20
20
  stream: PassThrough;
21
21
  metrics: StreamMetrics;
22
22
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"collectHtmlWorkerContent.d.ts","sourceRoot":"","sources":["../../../plugin/react-static/collectHtmlWorkerContent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAa,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKvE;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,WAAW,EACtB,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,CAAC,CAyG1D"}
1
+ {"version":3,"file":"collectHtmlWorkerContent.d.ts","sourceRoot":"","sources":["../../../plugin/react-static/collectHtmlWorkerContent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAa,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,YAAY,EACb,MAAM,aAAa,CAAC;AAKrB;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,SAAS,SAAS,YAAY,GAAG,YAAY,EAE7C,SAAS,EAAE,WAAW,EACtB,cAAc,EAAE,oBAAoB,CAAC,CAAC,EAAE,SAAS,CAAC,GACjD,OAAO,CAAC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,CAAC,CAyG1D"}
@@ -1 +1 @@
1
- {"version":3,"file":"collectHtmlWorkerContent.js","sources":["../../../plugin/react-static/collectHtmlWorkerContent.ts"],"sourcesContent":["/**\n * rscHandler.ts\n *\n * PURPOSE: Handles collecting HTML content from the htmlCompact stream\n *\n * This module:\n * 1. Collects HTML content from the rscFull stream (which includes <html> and <body> tags)\n * 2. Returns the complete HTML content when the stream is done\n * 3. Provides a clean interface for HTML handling\n */\n\nimport { PassThrough, Transform } from \"node:stream\";\nimport type { CreateHandlerOptions, StreamMetrics } from \"../types.js\";\nimport { createStreamMetrics } from \"../helpers/metrics.js\";\nimport { createRscToHtmlStream } from \"./rscToHtmlStream.js\";\nimport { fileWriter } from \"./fileWriter.js\";\n\n/**\n * Collects RSC content from the rscFull stream\n *\n * @param rscFull The stream containing the RSC content\n * @returns A promise that resolves with the complete RSC content\n */\nexport async function collectHtmlWorkerContent(\n rscStream: PassThrough,\n handlerOptions: CreateHandlerOptions\n): Promise<{ stream: PassThrough; metrics: StreamMetrics }> {\n if (!handlerOptions.worker) {\n throw new Error(\"Worker is not a valid worker\");\n }\n const metrics = createStreamMetrics();\n const startTime = performance.now();\n\n // Create RSC to HTML transform stream\n const rscToHtmlStream = createRscToHtmlStream({\n worker: handlerOptions.worker,\n route: handlerOptions.route,\n moduleRootPath: handlerOptions.moduleRootPath,\n moduleBaseURL: handlerOptions.moduleBaseURL,\n pipeableStreamOptions: handlerOptions.pipeableStreamOptions,\n build: handlerOptions.build,\n cssFiles: handlerOptions.cssFiles,\n projectRoot: handlerOptions.projectRoot,\n });\n\n // Create transform stream to handle HTML chunks and file writing\n const htmlTransform = new Transform({\n transform(chunk, _encoding, callback) {\n metrics.chunks++;\n callback(null, chunk);\n },\n flush(callback) {\n metrics.duration = performance.now() - startTime;\n callback();\n },\n });\n\n let isComplete = false;\n\n // Create a promise that resolves when the route is complete\n const routeComplete = new Promise<void>((resolve, reject) => {\n if (!handlerOptions.worker) {\n throw new Error(\"Worker is not a valid worker\");\n }\n const messageHandler = (msg: any) => {\n if (!handlerOptions.worker) {\n throw new Error(\"Worker is not a valid worker\");\n }\n switch (msg.type) {\n case \"HTML_CHUNK\":\n if (!isComplete) {\n htmlTransform.write(msg.chunk);\n }\n break;\n case \"HTML_COMPLETE\":\n isComplete = true;\n // End the transform stream\n htmlTransform.end();\n // Send cleanup message to worker\n handlerOptions.worker.postMessage({\n type: \"CLEANUP\",\n id: handlerOptions.route,\n });\n break;\n case \"CLEANUP_COMPLETE\":\n resolve();\n break;\n case \"ERROR\":\n handlerOptions.worker.removeListener(\"message\", messageHandler);\n reject(msg.error);\n break;\n }\n };\n handlerOptions.worker.on(\"message\", messageHandler);\n });\n\n try {\n // Set up event handler to capture content length\n if (handlerOptions.onEvent) {\n const originalOnEvent = handlerOptions.onEvent;\n handlerOptions.onEvent = (event) => {\n if (\n event.type === \"file.write.done\" &&\n event.data.fileType === \"html\"\n ) {\n metrics.bytes = event.data.content.length;\n }\n originalOnEvent(event);\n };\n }\n\n // Pipe RSC through transform to HTML\n rscStream.pipe(rscToHtmlStream);\n\n // Set up file writing using fileWriter\n const writePromise = fileWriter(htmlTransform, \"html\", handlerOptions);\n\n // Wait for route to complete\n await routeComplete;\n\n // Wait for file writing to complete\n await writePromise;\n\n rscToHtmlStream.destroy();\n\n return { stream: rscStream, metrics };\n } catch (error) {\n // Clean up streams on error\n rscToHtmlStream.destroy();\n throw error;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"collectHtmlWorkerContent.js","sources":["../../../plugin/react-static/collectHtmlWorkerContent.ts"],"sourcesContent":["/**\n * rscHandler.ts\n *\n * PURPOSE: Handles collecting HTML content from the htmlCompact stream\n *\n * This module:\n * 1. Collects HTML content from the rscFull stream (which includes <html> and <body> tags)\n * 2. Returns the complete HTML content when the stream is done\n * 3. Provides a clean interface for HTML handling\n */\n\nimport { PassThrough, Transform } from \"node:stream\";\nimport type {\n CreateHandlerOptions,\n StreamMetrics,\n PagePropOpt,\n InlineCssOpt,\n} from \"../types.js\";\nimport { createStreamMetrics } from \"../helpers/metrics.js\";\nimport { createRscToHtmlStream } from \"./rscToHtmlStream.js\";\nimport { fileWriter } from \"./fileWriter.js\";\n\n/**\n * Collects RSC content from the rscFull stream\n *\n * @param rscFull The stream containing the RSC content\n * @returns A promise that resolves with the complete RSC content\n */\nexport async function collectHtmlWorkerContent<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n>(\n rscStream: PassThrough,\n handlerOptions: CreateHandlerOptions<T, InlineCSS>\n): Promise<{ stream: PassThrough; metrics: StreamMetrics }> {\n if (!handlerOptions.worker) {\n throw new Error(\"Worker is not a valid worker\");\n }\n const metrics = createStreamMetrics();\n const startTime = performance.now();\n\n // Create RSC to HTML transform stream\n const rscToHtmlStream = createRscToHtmlStream({\n worker: handlerOptions.worker,\n route: handlerOptions.route,\n moduleRootPath: handlerOptions.moduleRootPath,\n moduleBaseURL: handlerOptions.moduleBaseURL,\n pipeableStreamOptions: handlerOptions.pipeableStreamOptions,\n build: handlerOptions.build,\n cssFiles: handlerOptions.cssFiles,\n projectRoot: handlerOptions.projectRoot,\n });\n\n // Create transform stream to handle HTML chunks and file writing\n const htmlTransform = new Transform({\n transform(chunk, _encoding, callback) {\n metrics.chunks++;\n callback(null, chunk);\n },\n flush(callback) {\n metrics.duration = performance.now() - startTime;\n callback();\n },\n });\n\n let isComplete = false;\n\n // Create a promise that resolves when the route is complete\n const routeComplete = new Promise<void>((resolve, reject) => {\n if (!handlerOptions.worker) {\n throw new Error(\"Worker is not a valid worker\");\n }\n const messageHandler = (msg: any) => {\n if (!handlerOptions.worker) {\n throw new Error(\"Worker is not a valid worker\");\n }\n switch (msg.type) {\n case \"HTML_CHUNK\":\n if (!isComplete) {\n htmlTransform.write(msg.chunk);\n }\n break;\n case \"HTML_COMPLETE\":\n isComplete = true;\n // End the transform stream\n htmlTransform.end();\n // Send cleanup message to worker\n handlerOptions.worker.postMessage({\n type: \"CLEANUP\",\n id: handlerOptions.route,\n });\n break;\n case \"CLEANUP_COMPLETE\":\n resolve();\n break;\n case \"ERROR\":\n handlerOptions.worker.removeListener(\"message\", messageHandler);\n reject(msg.error);\n break;\n }\n };\n handlerOptions.worker.on(\"message\", messageHandler);\n });\n\n try {\n // Set up event handler to capture content length\n if (handlerOptions.onEvent) {\n const originalOnEvent = handlerOptions.onEvent;\n handlerOptions.onEvent = (event) => {\n if (\n event.type === \"file.write.done\" &&\n event.data.fileType === \"html\"\n ) {\n metrics.bytes = event.data.content.length;\n }\n originalOnEvent(event);\n };\n }\n\n // Pipe RSC through transform to HTML\n rscStream.pipe(rscToHtmlStream);\n\n // Set up file writing using fileWriter\n const writePromise = fileWriter(htmlTransform, \"html\", handlerOptions);\n\n // Wait for route to complete\n await routeComplete;\n\n // Wait for file writing to complete\n await writePromise;\n\n rscToHtmlStream.destroy();\n\n return { stream: rscStream, metrics };\n } catch (error) {\n // Clean up streams on error\n rscToHtmlStream.destroy();\n throw error;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@
9
9
  * 3. Provides a clean interface for RSC handling
10
10
  */
11
11
  import { PassThrough } from "node:stream";
12
- import type { CreateHandlerOptions, StreamMetrics } from "../types.js";
12
+ import type { CreateHandlerOptions, StreamMetrics, PagePropOpt, InlineCssOpt } from "../types.js";
13
13
  /**
14
14
  * Collects RSC content from the rscHeadless stream
15
15
  *
@@ -17,7 +17,7 @@ import type { CreateHandlerOptions, StreamMetrics } from "../types.js";
17
17
  * @param handlerOptions The options for the handler
18
18
  * @returns A promise that resolves with the complete RSC content and metrics
19
19
  */
20
- export declare function collectRscContent(rscStream: PassThrough, handlerOptions: CreateHandlerOptions): Promise<{
20
+ export declare function collectRscContent<T extends PagePropOpt = PagePropOpt, InlineCSS extends InlineCssOpt = InlineCssOpt>(rscStream: PassThrough, handlerOptions: CreateHandlerOptions<T, InlineCSS>): Promise<{
21
21
  stream: PassThrough;
22
22
  metrics: StreamMetrics;
23
23
  }>;