vite-plugin-react-server 1.1.9 → 1.1.11

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 (415) hide show
  1. package/README.md +208 -27
  2. package/dist/index.js.map +1 -1
  3. package/dist/package.json +34 -14
  4. package/dist/plugin/{css-collector-elements.d.ts → components/css-collector-elements.d.ts} +1 -1
  5. package/dist/plugin/components/css-collector-elements.d.ts.map +1 -0
  6. package/dist/plugin/components/css-collector-elements.js.map +1 -0
  7. package/dist/plugin/{css-collector.d.ts → components/css-collector.d.ts} +1 -1
  8. package/dist/plugin/components/css-collector.d.ts.map +1 -0
  9. package/dist/plugin/components/css-collector.js.map +1 -0
  10. package/dist/plugin/components/html.d.ts +4 -0
  11. package/dist/plugin/components/html.d.ts.map +1 -0
  12. package/dist/plugin/components/html.js +17 -0
  13. package/dist/plugin/components/html.js.map +1 -0
  14. package/dist/plugin/components/index.d.ts +5 -0
  15. package/dist/plugin/components/index.d.ts.map +1 -0
  16. package/dist/plugin/components.js +9 -3
  17. package/dist/plugin/components.js.map +1 -0
  18. package/dist/plugin/config/autoDiscover/index.d.ts +6 -0
  19. package/dist/plugin/config/autoDiscover/index.d.ts.map +1 -0
  20. package/dist/plugin/config/autoDiscover/index.js +8 -0
  21. package/dist/plugin/config/{resolveAutoDiscover.d.ts → autoDiscover/resolveAutoDiscover.d.ts} +1 -1
  22. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts.map +1 -0
  23. package/dist/plugin/config/{resolveAutoDiscover.js → autoDiscover/resolveAutoDiscover.js} +10 -9
  24. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.js.map +1 -0
  25. package/dist/plugin/config/autoDiscover/resolveBuildPages.d.ts.map +1 -1
  26. package/dist/plugin/config/autoDiscover/resolveBuildPages.js +10 -10
  27. package/dist/plugin/config/autoDiscover/resolveBuildPages.js.map +1 -1
  28. package/dist/plugin/config/defaults.d.ts +6 -4
  29. package/dist/plugin/config/defaults.d.ts.map +1 -1
  30. package/dist/plugin/config/defaults.js +8 -4
  31. package/dist/plugin/config/defaults.js.map +1 -1
  32. package/dist/plugin/config/index.d.ts +1 -0
  33. package/dist/plugin/config/index.d.ts.map +1 -1
  34. package/dist/plugin/config/index.js +1 -0
  35. package/dist/plugin/config/resolveDevServerConfig.d.ts +2 -0
  36. package/dist/plugin/config/resolveDevServerConfig.d.ts.map +1 -0
  37. package/dist/plugin/config/resolveEnv.d.ts +13 -0
  38. package/dist/plugin/config/resolveEnv.d.ts.map +1 -0
  39. package/dist/plugin/config/resolveEnv.js +120 -0
  40. package/dist/plugin/config/resolveEnv.js.map +1 -0
  41. package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
  42. package/dist/plugin/config/resolveOptions.js +34 -11
  43. package/dist/plugin/config/resolveOptions.js.map +1 -1
  44. package/dist/plugin/config/resolveUrlOption.d.ts +1 -1
  45. package/dist/plugin/config/resolveUrlOption.d.ts.map +1 -1
  46. package/dist/plugin/config/resolveUrlOption.js +1 -2
  47. package/dist/plugin/config/resolveUrlOption.js.map +1 -1
  48. package/dist/plugin/config/resolveUserConfig.d.ts.map +1 -1
  49. package/dist/plugin/config/resolveUserConfig.js +80 -69
  50. package/dist/plugin/config/resolveUserConfig.js.map +1 -1
  51. package/dist/plugin/config.js +17 -0
  52. package/dist/plugin/config.js.map +1 -0
  53. package/dist/plugin/env/index.d.ts +2 -0
  54. package/dist/plugin/env/index.d.ts.map +1 -0
  55. package/dist/plugin/env/index.js +1 -0
  56. package/dist/plugin/env/plugin.d.ts +30 -0
  57. package/dist/plugin/env/plugin.d.ts.map +1 -0
  58. package/dist/plugin/env/plugin.js +64 -0
  59. package/dist/plugin/env.js +45 -0
  60. package/dist/plugin/env.js.map +1 -0
  61. package/dist/plugin/error/toError.d.ts +6 -0
  62. package/dist/plugin/error/toError.d.ts.map +1 -0
  63. package/dist/plugin/error/toError.js +19 -0
  64. package/dist/plugin/error/toError.js.map +1 -0
  65. package/dist/plugin/file-preserver/plugin.d.ts +19 -0
  66. package/dist/plugin/file-preserver/plugin.d.ts.map +1 -0
  67. package/dist/plugin/file-preserver/plugin.js +108 -0
  68. package/dist/plugin/file-preserver.js +96 -0
  69. package/dist/plugin/file-preserver.js.map +1 -0
  70. package/dist/plugin/helpers/collectManifestCss.js.map +1 -1
  71. package/dist/plugin/helpers/createCssProps.d.ts.map +1 -1
  72. package/dist/plugin/helpers/createCssProps.js +10 -2
  73. package/dist/plugin/helpers/createCssProps.js.map +1 -1
  74. package/dist/plugin/helpers/createEventHandler.d.ts +1 -1
  75. package/dist/plugin/helpers/createRscStream.js +1 -1
  76. package/dist/plugin/helpers/createRscStream.js.map +1 -1
  77. package/dist/plugin/helpers/formatMetrics.d.ts +3 -1
  78. package/dist/plugin/helpers/formatMetrics.d.ts.map +1 -1
  79. package/dist/plugin/helpers/formatMetrics.js +22 -7
  80. package/dist/plugin/helpers/formatMetrics.js.map +1 -0
  81. package/dist/plugin/helpers/getRouteFiles.d.ts +1 -1
  82. package/dist/plugin/helpers/getRouteFiles.d.ts.map +1 -1
  83. package/dist/plugin/helpers/getRouteFiles.js +2 -0
  84. package/dist/plugin/helpers/getRouteFiles.js.map +1 -1
  85. package/dist/plugin/helpers/index.d.ts +24 -0
  86. package/dist/plugin/helpers/index.d.ts.map +1 -0
  87. package/dist/plugin/helpers/index.js +31 -0
  88. package/dist/plugin/helpers/inputNormalizer.d.ts +2 -1
  89. package/dist/plugin/helpers/inputNormalizer.d.ts.map +1 -1
  90. package/dist/plugin/helpers/inputNormalizer.js +34 -9
  91. package/dist/plugin/helpers/inputNormalizer.js.map +1 -1
  92. package/dist/plugin/helpers/metrics.js +26 -2
  93. package/dist/plugin/helpers/metrics.js.map +1 -1
  94. package/dist/plugin/helpers/moduleRefs.d.ts.map +1 -0
  95. package/dist/plugin/helpers/moduleRefs.js.map +1 -0
  96. package/dist/plugin/helpers/requestInfo.d.ts +26 -0
  97. package/dist/plugin/helpers/requestInfo.d.ts.map +1 -0
  98. package/dist/plugin/helpers/requestInfo.js +66 -0
  99. package/dist/plugin/helpers/requestInfo.js.map +1 -0
  100. package/dist/plugin/helpers/requestToRoute.js.map +1 -1
  101. package/dist/plugin/helpers/resolvePage.d.ts.map +1 -0
  102. package/dist/plugin/{resolvePage.js → helpers/resolvePage.js} +19 -3
  103. package/dist/plugin/helpers/resolvePage.js.map +1 -0
  104. package/dist/plugin/helpers/resolvePageAndProps.d.ts.map +1 -1
  105. package/dist/plugin/helpers/resolvePageAndProps.js +7 -4
  106. package/dist/plugin/helpers/resolvePageAndProps.js.map +1 -1
  107. package/dist/plugin/helpers/resolveProps.d.ts.map +1 -0
  108. package/dist/plugin/{resolveProps.js → helpers/resolveProps.js} +9 -6
  109. package/dist/plugin/helpers/resolveProps.js.map +1 -0
  110. package/dist/plugin/helpers/serializeUserOptions.js +1 -1
  111. package/dist/plugin/helpers/serializeUserOptions.js.map +1 -1
  112. package/dist/plugin/helpers/stashReturnValue.js +19 -13
  113. package/dist/plugin/helpers/stashReturnValue.js.map +1 -0
  114. package/dist/plugin/helpers/tryManifest.d.ts.map +1 -1
  115. package/dist/plugin/helpers/tryManifest.js +0 -1
  116. package/dist/plugin/helpers/tryManifest.js.map +1 -1
  117. package/dist/plugin/helpers.js +27 -0
  118. package/dist/plugin/helpers.js.map +1 -0
  119. package/dist/plugin/loader/createBuildLoader.js +1 -1
  120. package/dist/plugin/loader/createBuildLoader.js.map +1 -1
  121. package/dist/plugin/loader/css-loader.development.d.ts.map +1 -1
  122. package/dist/plugin/loader/css-loader.development.js +1 -7
  123. package/dist/plugin/loader/css-loader.development.js.map +1 -1
  124. package/dist/plugin/loader/css-loader.production.js.map +1 -1
  125. package/dist/plugin/loader/env-loader.development.d.ts +12 -0
  126. package/dist/plugin/loader/env-loader.development.d.ts.map +1 -0
  127. package/dist/plugin/loader/env-loader.development.js +60 -0
  128. package/dist/plugin/loader/react-loader.d.ts.map +1 -1
  129. package/dist/plugin/loader/react-loader.js +1 -8
  130. package/dist/plugin/loader/react-loader.js.map +1 -1
  131. package/dist/plugin/metrics/formatMetrics.d.ts +6 -1
  132. package/dist/plugin/metrics/formatMetrics.d.ts.map +1 -1
  133. package/dist/plugin/metrics/formatMetrics.js +21 -3
  134. package/dist/plugin/metrics/formatMetrics.js.map +1 -1
  135. package/dist/plugin/metrics.js +1 -1
  136. package/dist/plugin/plugin.client.d.ts.map +1 -1
  137. package/dist/plugin/plugin.client.js +2 -0
  138. package/dist/plugin/plugin.client.js.map +1 -1
  139. package/dist/plugin/plugin.d.ts.map +1 -1
  140. package/dist/plugin/plugin.js +1 -2
  141. package/dist/plugin/plugin.server.d.ts.map +1 -1
  142. package/dist/plugin/plugin.server.js +3 -0
  143. package/dist/plugin/plugin.server.js.map +1 -1
  144. package/dist/plugin/preserver/plugin.js.map +1 -1
  145. package/dist/plugin/process-env.d.ts +14 -0
  146. package/dist/plugin/process-env.d.ts.map +1 -0
  147. package/dist/plugin/process-env.js +1 -0
  148. package/dist/plugin/react-client/createMessageHandlers.d.ts +11 -0
  149. package/dist/plugin/react-client/createMessageHandlers.d.ts.map +1 -0
  150. package/dist/plugin/react-client/createMessageHandlers.js +47 -0
  151. package/dist/plugin/react-client/createMessageHandlers.js.map +1 -0
  152. package/dist/plugin/react-client/createWorkerStream.d.ts +9 -3
  153. package/dist/plugin/react-client/createWorkerStream.d.ts.map +1 -1
  154. package/dist/plugin/react-client/createWorkerStream.js +102 -70
  155. package/dist/plugin/react-client/createWorkerStream.js.map +1 -1
  156. package/dist/plugin/react-client/handleWorkerRscStream.d.ts +19 -0
  157. package/dist/plugin/react-client/handleWorkerRscStream.d.ts.map +1 -0
  158. package/dist/plugin/react-client/handleWorkerRscStream.js +47 -0
  159. package/dist/plugin/react-client/handleWorkerRscStream.js.map +1 -0
  160. package/dist/plugin/react-client/plugin.d.ts.map +1 -1
  161. package/dist/plugin/react-client/plugin.js +19 -5
  162. package/dist/plugin/react-client/plugin.js.map +1 -1
  163. package/dist/plugin/react-client/restartWorker.d.ts +6 -1
  164. package/dist/plugin/react-client/restartWorker.d.ts.map +1 -1
  165. package/dist/plugin/react-client/restartWorker.js +13 -5
  166. package/dist/plugin/react-client/restartWorker.js.map +1 -1
  167. package/dist/plugin/react-client/server.d.ts +2 -13
  168. package/dist/plugin/react-client/server.d.ts.map +1 -1
  169. package/dist/plugin/react-client/server.js +123 -121
  170. package/dist/plugin/react-client/server.js.map +1 -1
  171. package/dist/plugin/react-server/plugin.d.ts.map +1 -1
  172. package/dist/plugin/react-server/plugin.js +18 -8
  173. package/dist/plugin/react-server/plugin.js.map +1 -1
  174. package/dist/plugin/react-server/server.d.ts.map +1 -1
  175. package/dist/plugin/react-server/server.js +37 -23
  176. package/dist/plugin/react-server/server.js.map +1 -1
  177. package/dist/plugin/react-static/collectHtmlWorkerContent.d.ts.map +1 -1
  178. package/dist/plugin/react-static/collectHtmlWorkerContent.js +9 -0
  179. package/dist/plugin/react-static/collectHtmlWorkerContent.js.map +1 -1
  180. package/dist/plugin/react-static/collectRscContent.js.map +1 -1
  181. package/dist/plugin/react-static/configurePreviewServer.d.ts.map +1 -1
  182. package/dist/plugin/react-static/configurePreviewServer.js +58 -54
  183. package/dist/plugin/react-static/configurePreviewServer.js.map +1 -1
  184. package/dist/plugin/react-static/fileWriter.d.ts +1 -1
  185. package/dist/plugin/react-static/fileWriter.d.ts.map +1 -1
  186. package/dist/plugin/react-static/fileWriter.js.map +1 -1
  187. package/dist/plugin/react-static/plugin.d.ts.map +1 -1
  188. package/dist/plugin/react-static/plugin.js +21 -23
  189. package/dist/plugin/react-static/plugin.js.map +1 -1
  190. package/dist/plugin/react-static/renderPages.js.map +1 -1
  191. package/dist/plugin/root.d.ts +1 -0
  192. package/dist/plugin/root.d.ts.map +1 -1
  193. package/dist/plugin/root.js +3 -2
  194. package/dist/plugin/root.js.map +1 -1
  195. package/dist/plugin/transformer/plugin.client.d.ts.map +1 -1
  196. package/dist/plugin/transformer/plugin.client.js +3 -12
  197. package/dist/plugin/transformer/plugin.client.js.map +1 -1
  198. package/dist/plugin/transformer/plugin.js.map +1 -1
  199. package/dist/plugin/transformer/plugin.server.d.ts.map +1 -1
  200. package/dist/plugin/transformer/plugin.server.js +17 -24
  201. package/dist/plugin/transformer/plugin.server.js.map +1 -1
  202. package/dist/plugin/transformer/upgradeCssModuleCode.d.ts +1 -10
  203. package/dist/plugin/transformer/upgradeCssModuleCode.d.ts.map +1 -1
  204. package/dist/plugin/transformer/upgradeCssModuleCode.js +40 -38
  205. package/dist/plugin/types.d.ts +60 -15
  206. package/dist/plugin/types.d.ts.map +1 -1
  207. package/dist/plugin/types.js +1 -1
  208. package/dist/plugin/utils/callServer.d.ts +1 -1
  209. package/dist/plugin/utils/callServer.d.ts.map +1 -1
  210. package/dist/plugin/utils/callServer.js +3 -17
  211. package/dist/plugin/utils/callServer.js.map +1 -1
  212. package/dist/plugin/utils/createCallServer.d.ts +2 -0
  213. package/dist/plugin/utils/createCallServer.d.ts.map +1 -0
  214. package/dist/plugin/utils/createCallServer.js +28 -0
  215. package/dist/plugin/utils/createCallServer.js.map +1 -0
  216. package/dist/plugin/utils/createReactFetcher.d.ts +3 -1
  217. package/dist/plugin/utils/createReactFetcher.d.ts.map +1 -1
  218. package/dist/plugin/utils/createReactFetcher.js +11 -11
  219. package/dist/plugin/utils/createReactFetcher.js.map +1 -1
  220. package/dist/plugin/utils/env.d.ts +2 -0
  221. package/dist/plugin/utils/env.d.ts.map +1 -0
  222. package/dist/plugin/utils/env.js +9 -0
  223. package/dist/plugin/utils/env.js.map +1 -0
  224. package/dist/plugin/utils/envUrls.d.ts +9 -0
  225. package/dist/plugin/utils/envUrls.d.ts.map +1 -0
  226. package/dist/plugin/utils/envUrls.js +7 -0
  227. package/dist/plugin/utils/envUrls.node.d.ts +7 -0
  228. package/dist/plugin/utils/envUrls.node.d.ts.map +1 -0
  229. package/dist/plugin/utils/envUrls.node.js +11 -0
  230. package/dist/plugin/utils/envUrls.node.js.map +1 -0
  231. package/dist/plugin/utils/index.d.ts +2 -1
  232. package/dist/plugin/utils/index.d.ts.map +1 -1
  233. package/dist/plugin/utils/index.js +2 -1
  234. package/dist/plugin/utils/moduleBaseURL.d.ts +3 -0
  235. package/dist/plugin/utils/moduleBaseURL.d.ts.map +1 -0
  236. package/dist/plugin/utils/moduleBaseURL.js +4 -0
  237. package/dist/plugin/utils/urls.d.ts +130 -0
  238. package/dist/plugin/utils/urls.d.ts.map +1 -0
  239. package/dist/plugin/utils/urls.js +87 -0
  240. package/dist/plugin/utils/urls.js.map +1 -0
  241. package/dist/plugin/utils.js +2 -1
  242. package/dist/plugin/utils.js.map +1 -1
  243. package/dist/plugin/vendor/index.d.ts +2 -0
  244. package/dist/plugin/vendor/index.d.ts.map +1 -0
  245. package/dist/plugin/vendor/index.js +1 -0
  246. package/dist/plugin/vendor/vendor.client.d.ts.map +1 -0
  247. package/dist/plugin/vendor/vendor.client.js.map +1 -0
  248. package/dist/plugin/vendor/vendor.d.ts +2 -0
  249. package/dist/plugin/vendor/vendor.d.ts.map +1 -0
  250. package/dist/plugin/vendor/vendor.js +15 -0
  251. package/dist/plugin/vendor/vendor.js.map +1 -0
  252. package/dist/plugin/vendor/vendor.server.d.ts.map +1 -0
  253. package/dist/plugin/vendor/vendor.server.js.map +1 -0
  254. package/dist/plugin/vendor.js +7 -0
  255. package/dist/plugin/vendor.js.map +1 -0
  256. package/dist/plugin/worker/createWorker.d.ts +3 -0
  257. package/dist/plugin/worker/createWorker.d.ts.map +1 -1
  258. package/dist/plugin/worker/createWorker.js +37 -23
  259. package/dist/plugin/worker/createWorker.js.map +1 -1
  260. package/dist/plugin/worker/html/createHtmlWorkerRenderState.d.ts.map +1 -1
  261. package/dist/plugin/worker/html/createHtmlWorkerRenderState.js +4 -1
  262. package/dist/plugin/worker/html/createHtmlWorkerRenderState.js.map +1 -1
  263. package/dist/plugin/worker/html/html-worker.development.js.map +1 -1
  264. package/dist/plugin/worker/html/html-worker.production.js.map +1 -1
  265. package/dist/plugin/worker/rsc/handleRender.d.ts +2 -7
  266. package/dist/plugin/worker/rsc/handleRender.d.ts.map +1 -1
  267. package/dist/plugin/worker/rsc/handleRender.js +4 -4
  268. package/dist/plugin/worker/rsc/handleRender.js.map +1 -1
  269. package/dist/plugin/worker/rsc/messageHandler.d.ts +2 -1
  270. package/dist/plugin/worker/rsc/messageHandler.d.ts.map +1 -1
  271. package/dist/plugin/worker/rsc/messageHandler.js +42 -16
  272. package/dist/plugin/worker/rsc/messageHandler.js.map +1 -1
  273. package/dist/plugin/worker/rsc/rsc-worker.development.js +16 -5
  274. package/dist/plugin/worker/rsc/rsc-worker.development.js.map +1 -1
  275. package/dist/plugin/worker/rsc/rsc-worker.production.js +16 -5
  276. package/dist/plugin/worker/rsc/rsc-worker.production.js.map +1 -1
  277. package/dist/plugin/worker/rsc/state.d.ts.map +1 -1
  278. package/dist/plugin/worker/rsc/state.js.map +1 -1
  279. package/dist/plugin/worker/sendMessage.js +45 -43
  280. package/dist/plugin/worker/sendMessage.js.map +1 -0
  281. package/dist/plugin/worker/types.d.ts +32 -4
  282. package/dist/plugin/worker/types.d.ts.map +1 -1
  283. package/dist/server.js +1 -1
  284. package/dist/server.js.map +1 -1
  285. package/dist/tsconfig.tsbuildinfo +1 -1
  286. package/package.json +34 -14
  287. package/plugin/{css-collector-elements.tsx → components/css-collector-elements.tsx} +1 -1
  288. package/plugin/{css-collector.tsx → components/css-collector.tsx} +1 -1
  289. package/plugin/{html.tsx → components/html.tsx} +1 -3
  290. package/{dist/plugin/components.d.ts → plugin/components/index.ts} +1 -1
  291. package/plugin/config/autoDiscover/index.ts +10 -0
  292. package/plugin/config/{resolveAutoDiscover.ts → autoDiscover/resolveAutoDiscover.ts} +16 -12
  293. package/plugin/config/autoDiscover/resolveBuildPages.ts +10 -11
  294. package/plugin/config/defaults.tsx +6 -4
  295. package/plugin/config/index.ts +1 -1
  296. package/plugin/config/resolveEnv.ts +187 -0
  297. package/plugin/config/resolveOptions.ts +60 -27
  298. package/plugin/config/resolveUrlOption.ts +2 -7
  299. package/plugin/config/resolveUserConfig.ts +145 -98
  300. package/plugin/env/index.ts +1 -0
  301. package/plugin/env/plugin.ts +78 -0
  302. package/plugin/error/toError.ts +19 -0
  303. package/plugin/file-preserver/plugin.ts +117 -0
  304. package/plugin/helpers/createCssProps.tsx +14 -6
  305. package/plugin/helpers/createRscStream.tsx +1 -1
  306. package/plugin/helpers/formatMetrics.ts +2 -2
  307. package/plugin/helpers/getRouteFiles.ts +3 -1
  308. package/plugin/helpers/index.ts +38 -0
  309. package/plugin/helpers/inputNormalizer.ts +66 -17
  310. package/plugin/helpers/requestInfo.ts +91 -0
  311. package/plugin/{resolvePage.ts → helpers/resolvePage.ts} +19 -4
  312. package/plugin/helpers/resolvePageAndProps.ts +7 -4
  313. package/plugin/{resolveProps.ts → helpers/resolveProps.ts} +8 -6
  314. package/plugin/helpers/serializeUserOptions.ts +1 -1
  315. package/plugin/helpers/tryManifest.ts +0 -1
  316. package/plugin/loader/createBuildLoader.ts +1 -1
  317. package/plugin/loader/css-loader.development.ts +2 -8
  318. package/plugin/loader/env-loader.development.ts +84 -0
  319. package/plugin/loader/react-loader.ts +1 -10
  320. package/plugin/metrics/formatMetrics.ts +29 -4
  321. package/plugin/plugin.client.ts +2 -0
  322. package/plugin/plugin.server.ts +3 -0
  323. package/plugin/plugin.ts +1 -3
  324. package/plugin/preserver/plugin.ts +1 -0
  325. package/plugin/process-env.ts +13 -0
  326. package/plugin/react-client/createMessageHandlers.ts +49 -0
  327. package/plugin/react-client/createWorkerStream.ts +130 -83
  328. package/plugin/react-client/handleWorkerRscStream.ts +57 -0
  329. package/plugin/react-client/plugin.ts +30 -17
  330. package/plugin/react-client/restartWorker.ts +15 -7
  331. package/plugin/react-client/server.ts +129 -164
  332. package/plugin/react-server/plugin.ts +26 -13
  333. package/plugin/react-server/server.ts +40 -35
  334. package/plugin/react-static/collectHtmlWorkerContent.ts +13 -1
  335. package/plugin/react-static/configurePreviewServer.ts +75 -62
  336. package/plugin/react-static/fileWriter.ts +1 -1
  337. package/plugin/react-static/plugin.ts +23 -30
  338. package/plugin/root.ts +7 -1
  339. package/plugin/transformer/plugin.client.ts +4 -12
  340. package/plugin/transformer/plugin.server.ts +18 -25
  341. package/plugin/transformer/upgradeCssModuleCode.ts +39 -39
  342. package/plugin/types/env.d.ts +7 -0
  343. package/plugin/types.ts +80 -29
  344. package/plugin/utils/callServer.ts +3 -24
  345. package/plugin/utils/createCallServer.ts +26 -0
  346. package/plugin/utils/createReactFetcher.ts +14 -12
  347. package/plugin/utils/env.ts +1 -0
  348. package/plugin/utils/envUrls.node.ts +19 -0
  349. package/plugin/utils/envUrls.ts +8 -0
  350. package/plugin/utils/index.ts +2 -1
  351. package/plugin/utils/moduleBaseURL.ts +7 -0
  352. package/plugin/utils/urls.ts +217 -0
  353. package/plugin/vendor/index.ts +1 -0
  354. package/plugin/vendor/vendor.ts +6 -0
  355. package/plugin/worker/createWorker.ts +41 -30
  356. package/plugin/worker/html/createHtmlWorkerRenderState.tsx +4 -1
  357. package/plugin/worker/html/html-worker.development.tsx +2 -1
  358. package/plugin/worker/html/html-worker.production.tsx +2 -1
  359. package/plugin/worker/rsc/handleRender.ts +6 -12
  360. package/plugin/worker/rsc/messageHandler.tsx +53 -20
  361. package/plugin/worker/rsc/rsc-worker.development.ts +23 -9
  362. package/plugin/worker/rsc/rsc-worker.production.ts +23 -7
  363. package/plugin/worker/types.ts +35 -4
  364. package/dist/plugin/components.d.ts.map +0 -1
  365. package/dist/plugin/config/resolveAutoDiscover.d.ts.map +0 -1
  366. package/dist/plugin/config/resolveAutoDiscover.js.map +0 -1
  367. package/dist/plugin/copy.d.ts +0 -7
  368. package/dist/plugin/copy.d.ts.map +0 -1
  369. package/dist/plugin/copy.js +0 -30
  370. package/dist/plugin/css-collector-elements.d.ts.map +0 -1
  371. package/dist/plugin/css-collector-elements.js.map +0 -1
  372. package/dist/plugin/css-collector.d.ts.map +0 -1
  373. package/dist/plugin/css-collector.js.map +0 -1
  374. package/dist/plugin/getCondition.d.ts +0 -2
  375. package/dist/plugin/getCondition.d.ts.map +0 -1
  376. package/dist/plugin/html.d.ts +0 -4
  377. package/dist/plugin/html.d.ts.map +0 -1
  378. package/dist/plugin/html.js +0 -18
  379. package/dist/plugin/html.js.map +0 -1
  380. package/dist/plugin/manifest.d.ts +0 -6
  381. package/dist/plugin/manifest.d.ts.map +0 -1
  382. package/dist/plugin/manifest.js +0 -13
  383. package/dist/plugin/moduleRefs.d.ts.map +0 -1
  384. package/dist/plugin/moduleRefs.js.map +0 -1
  385. package/dist/plugin/resolvePage.d.ts.map +0 -1
  386. package/dist/plugin/resolvePage.js.map +0 -1
  387. package/dist/plugin/resolveProps.d.ts.map +0 -1
  388. package/dist/plugin/resolveProps.js.map +0 -1
  389. package/dist/plugin/utils/pageURL.d.ts +0 -2
  390. package/dist/plugin/utils/pageURL.d.ts.map +0 -1
  391. package/dist/plugin/utils/pageURL.js +0 -21
  392. package/dist/plugin/utils/pageURL.js.map +0 -1
  393. package/dist/plugin/vendor.client.d.ts.map +0 -1
  394. package/dist/plugin/vendor.client.js.map +0 -1
  395. package/dist/plugin/vendor.server.d.ts.map +0 -1
  396. package/dist/plugin/vendor.server.js.map +0 -1
  397. package/plugin/copy.ts +0 -39
  398. package/plugin/manifest.ts +0 -24
  399. package/plugin/utils/pageURL.ts +0 -28
  400. /package/dist/plugin/{css-collector-elements.js → components/css-collector-elements.js} +0 -0
  401. /package/dist/plugin/{css-collector.js → components/css-collector.js} +0 -0
  402. /package/{plugin/components.ts → dist/plugin/components/index.js} +0 -0
  403. /package/dist/plugin/{getCondition.js → config/resolveDevServerConfig.js} +0 -0
  404. /package/dist/plugin/{moduleRefs.d.ts → helpers/moduleRefs.d.ts} +0 -0
  405. /package/dist/plugin/{moduleRefs.js → helpers/moduleRefs.js} +0 -0
  406. /package/dist/plugin/{resolvePage.d.ts → helpers/resolvePage.d.ts} +0 -0
  407. /package/dist/plugin/{resolveProps.d.ts → helpers/resolveProps.d.ts} +0 -0
  408. /package/dist/plugin/{vendor.client.d.ts → vendor/vendor.client.d.ts} +0 -0
  409. /package/dist/plugin/{vendor.client.js → vendor/vendor.client.js} +0 -0
  410. /package/dist/plugin/{vendor.server.d.ts → vendor/vendor.server.d.ts} +0 -0
  411. /package/dist/plugin/{vendor.server.js → vendor/vendor.server.js} +0 -0
  412. /package/plugin/{getCondition.ts → config/resolveDevServerConfig.tsx} +0 -0
  413. /package/plugin/{moduleRefs.ts → helpers/moduleRefs.ts} +0 -0
  414. /package/plugin/{vendor.client.ts → vendor/vendor.client.ts} +0 -0
  415. /package/plugin/{vendor.server.ts → vendor/vendor.server.ts} +0 -0
@@ -3,84 +3,116 @@
3
3
  * Copyright (c) Nico Brinkkemper
4
4
  * MIT License
5
5
  */
6
- import 'node:worker_threads';
6
+ import { createMessageHandler } from './createMessageHandlers.js';
7
7
 
8
- async function* createWorkerStream(worker, message, logger, onMetrics) {
9
- let messageHandler;
10
- let cleanup = () => {
11
- };
12
- let onError = (error) => {
13
- let err;
14
- if (typeof error === "string") {
15
- err = new Error(error);
16
- } else if (typeof error === "object" && error != null) {
17
- const stackTrace = "stack" in error ? String(error.stack) : "";
18
- const msg = "message" in error ? String(error.message) : "";
19
- err = {
20
- message: msg,
21
- stack: stackTrace
22
- };
23
- } else {
24
- err = new Error("Failed to load page content");
8
+ async function* createWorkerStream({
9
+ worker,
10
+ message,
11
+ logger,
12
+ handlers: { onHmrAccept, onHmrUpdate, onMetrics, onError, onData, onEnd },
13
+ verbose = false
14
+ }) {
15
+ let messageHandler = null;
16
+ let currentResolve = null;
17
+ const handlers = {
18
+ onError: (error, errorInfo) => {
19
+ logger.error(
20
+ "[react-client] " + (error.stack ?? error.stack.includes(error.message) ? "" : error.message + "\n") + error.stack,
21
+ {
22
+ error
23
+ }
24
+ );
25
+ if (errorInfo) {
26
+ logger.error(errorInfo.componentStack);
27
+ }
28
+ if (typeof onError === "function") {
29
+ onError(error, errorInfo);
30
+ }
31
+ },
32
+ onData: (chunk) => {
33
+ currentResolve?.(chunk);
34
+ if (verbose) logger.info(`received chunk ${chunk.length} bytes`);
35
+ if (typeof onData === "function") {
36
+ onData(chunk);
37
+ }
38
+ },
39
+ onEnd: () => {
40
+ currentResolve?.(new Uint8Array());
41
+ if (verbose) logger.info(`received end`);
42
+ if (messageHandler) {
43
+ worker.removeListener("message", messageHandler);
44
+ messageHandler = null;
45
+ }
46
+ if (typeof onEnd === "function") {
47
+ onEnd();
48
+ }
49
+ },
50
+ onMetrics: (metrics) => {
51
+ if (verbose) logger.info(`received chunks ${metrics.chunks}`);
52
+ if (typeof onMetrics === "function") {
53
+ onMetrics(metrics);
54
+ }
55
+ },
56
+ onHmrAccept: (routes) => {
57
+ if (verbose) logger.info(`received hmr accept ${routes.join(", ")}`);
58
+ },
59
+ onHmrUpdate: (routes) => {
60
+ if (verbose) logger.info(`received hmr update ${routes.join(", ")}`);
25
61
  }
26
- return new TextEncoder().encode(`0:E{"digest":"","name":"Error","message":"${err.message}","stack":${JSON.stringify(err.stack)},"env":"Server"}`);
27
62
  };
28
- yield await new Promise((resolve) => {
29
- messageHandler = (message2) => {
30
- switch (message2.type) {
31
- case "RSC_CHUNK":
32
- resolve(message2.chunk);
33
- break;
34
- case "RSC_END":
35
- resolve(new Uint8Array());
36
- break;
37
- case "ERROR":
38
- const errorResponse = onError(message2.error);
39
- resolve(errorResponse);
40
- break;
41
- default:
42
- logger.warn(`Unknown initial message type: ${message2.type}`);
43
- resolve(new Uint8Array());
44
- break;
45
- }
46
- };
47
- cleanup = () => {
48
- worker.off("message", messageHandler);
49
- };
50
- worker.on("message", messageHandler);
63
+ try {
64
+ if (messageHandler) {
65
+ worker.removeListener("message", messageHandler);
66
+ messageHandler = null;
67
+ }
68
+ if (verbose) logger.info(`sending message RSC_RENDER`);
51
69
  worker.postMessage({
70
+ ...message,
52
71
  type: "RSC_RENDER",
53
- id: message.route,
54
- ...message
72
+ id: Math.random().toString(36).slice(2)
55
73
  });
56
- });
57
- while (true) {
58
- const chunk = await new Promise((resolve) => {
59
- messageHandler = (message2) => {
60
- switch (message2.type) {
61
- case "RSC_END":
62
- cleanup();
63
- resolve(new Uint8Array());
64
- return;
65
- case "RSC_CHUNK":
66
- resolve(message2.chunk);
67
- return;
68
- case "RSC_METRICS":
69
- onMetrics?.(message2.metrics);
70
- break;
71
- case "ERROR":
72
- cleanup();
73
- const errorResponse = onError(message2.error);
74
- resolve(errorResponse);
75
- return;
76
- }
77
- };
78
- worker.once("message", messageHandler);
74
+ if (verbose) logger.info(`waiting for message handler`);
75
+ let workerTimeout = null;
76
+ yield await new Promise((resolve) => {
77
+ workerTimeout = setTimeout(() => {
78
+ if (verbose) logger.info(`worker timeout`);
79
+ worker.terminate();
80
+ }, 5e3);
81
+ currentResolve = resolve;
82
+ messageHandler = createMessageHandler({
83
+ handlers,
84
+ logger,
85
+ verbose
86
+ });
87
+ worker.on("message", messageHandler);
79
88
  });
80
- if (chunk.length === 0) {
81
- break;
89
+ if (workerTimeout) {
90
+ clearTimeout(workerTimeout);
91
+ }
92
+ if (verbose) logger.info(`received message handler`);
93
+ while (true) {
94
+ const chunk = await new Promise((resolve) => {
95
+ currentResolve = resolve;
96
+ if (messageHandler) {
97
+ worker.removeListener("message", messageHandler);
98
+ }
99
+ messageHandler = createMessageHandler({
100
+ handlers,
101
+ logger,
102
+ verbose
103
+ });
104
+ worker.on("message", messageHandler);
105
+ });
106
+ if (chunk.length === 0) {
107
+ break;
108
+ }
109
+ yield chunk;
110
+ }
111
+ } finally {
112
+ if (messageHandler) {
113
+ worker.removeListener("message", messageHandler);
114
+ messageHandler = null;
82
115
  }
83
- yield chunk;
84
116
  }
85
117
  }
86
118
 
@@ -1 +1 @@
1
- {"version":3,"file":"createWorkerStream.js","sources":["../../../plugin/react-client/createWorkerStream.ts"],"sourcesContent":["import type { Logger } from \"vite\";\nimport type { RscRenderMessage, RscWorkerOutputMessage } from \"../worker/types.js\";\nimport type { StreamMetrics } from \"../../types.js\";\nimport { Worker } from \"node:worker_threads\";\n/**\n * Creates an async generator that yields RSC chunks from the worker.\n * Handles both module requests and RSC streaming.\n *\n * @param worker - The worker thread\n * @param server - The Vite dev server\n * @param message - The RSC render message\n * @param rscWorkerLoaderPort - Optional loader port for module loading\n * @returns An async generator that yields RSC chunks\n */\nexport async function* createWorkerStream(\n worker: Worker,\n message: Omit<RscRenderMessage, \"type\" | \"id\">,\n logger: Logger,\n onMetrics?: (metrics: StreamMetrics) => void\n ): AsyncGenerator<Uint8Array, void, unknown> {\n let messageHandler: (message: RscWorkerOutputMessage) => void;\n let cleanup: () => void = () => {};\n let onError = (error: any) => {\n let err;\n if (typeof error === \"string\") {\n err = new Error(error);\n } else if (typeof error === \"object\" && error != null) {\n const stackTrace = \"stack\" in error ? String(error.stack) : \"\";\n const msg = \"message\" in error ? String(error.message) : \"\";\n err = {\n message: msg,\n stack: stackTrace,\n }\n } else {\n err = new Error(\"Failed to load page content\");\n }\n // Format the error using the worker's error details\n return new TextEncoder().encode(`0:E{\"digest\":\"\",\"name\":\"Error\",\"message\":\"${\n err.message\n }\",\"stack\":${JSON.stringify(err.stack)},\"env\":\"Server\"}`);\n };\n // First yield: wait for initial message and handle module requests\n yield await new Promise<Uint8Array>((resolve) => {\n messageHandler = (message: RscWorkerOutputMessage) => {\n switch (message.type) {\n case \"RSC_CHUNK\":\n resolve(message.chunk);\n break;\n case \"RSC_END\":\n resolve(new Uint8Array());\n break;\n case \"ERROR\":\n const errorResponse = onError(message.error);\n resolve(errorResponse);\n break;\n default:\n logger.warn(`Unknown initial message type: ${message.type}`);\n resolve(new Uint8Array());\n break;\n }\n };\n \n cleanup = () => {\n worker.off(\"message\", messageHandler);\n };\n \n worker.on(\"message\", messageHandler);\n \n // Send the render message to start the RSC stream\n worker.postMessage({\n type: \"RSC_RENDER\",\n id: message.route,\n ...message,\n });\n });\n \n // Subsequent yields: handle RSC chunks until stream ends\n while (true) {\n const chunk = await new Promise<Uint8Array>((resolve) => {\n messageHandler = (message: RscWorkerOutputMessage) => {\n switch (message.type) {\n case \"RSC_END\":\n cleanup();\n resolve(new Uint8Array());\n return;\n case \"RSC_CHUNK\":\n resolve(message.chunk);\n return;\n case \"RSC_METRICS\":\n onMetrics?.(message.metrics);\n break;\n case \"ERROR\":\n cleanup();\n const errorResponse = onError(message.error);\n resolve(errorResponse);\n return;\n }\n };\n worker.once(\"message\", messageHandler);\n });\n \n if (chunk.length === 0) {\n break;\n }\n yield chunk;\n }\n }"],"names":["message"],"mappings":"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"}
1
+ {"version":3,"file":"createWorkerStream.js","sources":["../../../plugin/react-client/createWorkerStream.ts"],"sourcesContent":["import type { Logger } from \"vite\";\nimport type {\n RscWorkerOutputMessage,\n RscRenderMessage,\n} from \"../worker/types.js\";\nimport type { StreamMetrics } from \"../types.js\";\nimport type { Worker as NodeWorker } from \"node:worker_threads\";\nimport type { StreamHandlers } from \"../worker/types.js\";\nimport { createMessageHandler } from \"./createMessageHandlers.js\";\n\n/**\n * Creates an async generator that yields RSC chunks from the worker.\n * Handles both module requests and RSC streaming.\n *\n * @param worker - The worker thread\n * @param server - The Vite dev server\n * @param message - The RSC render message\n * @param rscWorkerLoaderPort - Optional loader port for module loading\n * @returns An async generator that yields RSC chunks\n */\nexport async function* createWorkerStream({\n worker,\n message,\n logger,\n handlers: { onHmrAccept, onHmrUpdate, onMetrics, onError, onData, onEnd },\n verbose = false,\n}: {\n worker: NodeWorker;\n message: Omit<RscRenderMessage, \"type\" | \"id\">;\n logger: Logger;\n handlers: Pick<StreamHandlers, \"onHmrAccept\" | \"onHmrUpdate\" | \"onMetrics\"> &\n Partial<Pick<StreamHandlers, \"onError\" | \"onData\" | \"onEnd\">>;\n verbose?: boolean;\n}): AsyncGenerator<Uint8Array> {\n let messageHandler:\n | ((message: RscWorkerOutputMessage | undefined) => void)\n | null = null;\n let currentResolve: ((chunk: Uint8Array) => void) | null = null;\n const handlers: StreamHandlers = {\n onError: (error: any, errorInfo?: any) => {\n logger.error(\n \"[react-client] \" +\n (error.stack ?? error.stack.includes(error.message) ? \"\" : error.message + \"\\n\") +\n error.stack,\n {\n error,\n }\n );\n if (errorInfo) {\n logger.error(errorInfo.componentStack);\n }\n if (typeof onError === \"function\") {\n onError(error, errorInfo);\n }\n },\n onData: (chunk: Uint8Array) => {\n currentResolve?.(chunk);\n if (verbose) logger.info(`received chunk ${chunk.length} bytes`);\n if (typeof onData === \"function\") {\n onData(chunk);\n }\n },\n onEnd: () => {\n currentResolve?.(new Uint8Array());\n if (verbose) logger.info(`received end`);\n if (messageHandler) {\n worker.removeListener(\"message\", messageHandler);\n messageHandler = null;\n }\n if (typeof onEnd === \"function\") {\n onEnd();\n }\n },\n onMetrics: (metrics: StreamMetrics) => {\n if (verbose) logger.info(`received chunks ${metrics.chunks}`);\n if (typeof onMetrics === \"function\") {\n onMetrics(metrics);\n }\n },\n onHmrAccept: (routes: string[]) => {\n if (verbose) logger.info(`received hmr accept ${routes.join(\", \")}`);\n if (typeof onHmrAccept === \"function\") {\n onHmrAccept(routes);\n }\n },\n onHmrUpdate: (routes: string[]) => {\n if (verbose) logger.info(`received hmr update ${routes.join(\", \")}`);\n if (typeof onHmrUpdate === \"function\") {\n onHmrUpdate(routes);\n }\n },\n };\n\n try {\n // Remove any existing message handler before starting\n if (messageHandler) {\n worker.removeListener(\"message\", messageHandler);\n messageHandler = null;\n }\n if (verbose) logger.info(`sending message RSC_RENDER`);\n worker.postMessage({\n ...message,\n type: \"RSC_RENDER\",\n id: Math.random().toString(36).slice(2),\n });\n\n if (verbose) logger.info(`waiting for message handler`);\n let workerTimeout: NodeJS.Timeout | null = null;\n yield await new Promise<Uint8Array>((resolve) => {\n workerTimeout = setTimeout(() => {\n if (verbose) logger.info(`worker timeout`);\n worker.terminate();\n }, 5000);\n currentResolve = resolve;\n messageHandler = createMessageHandler({\n handlers,\n logger,\n verbose,\n });\n worker.on(\"message\", messageHandler);\n });\n if (workerTimeout) {\n clearTimeout(workerTimeout);\n }\n if (verbose) logger.info(`received message handler`);\n while (true) {\n const chunk = await new Promise<Uint8Array>((resolve) => {\n currentResolve = resolve;\n // Create new message handler for each iteration\n if (messageHandler) {\n worker.removeListener(\"message\", messageHandler);\n }\n messageHandler = createMessageHandler({\n handlers,\n logger,\n verbose,\n });\n worker.on(\"message\", messageHandler);\n });\n\n if (chunk.length === 0) {\n break;\n }\n\n yield chunk;\n }\n } finally {\n // Clean up message handler in finally block\n if (messageHandler) {\n worker.removeListener(\"message\", messageHandler);\n messageHandler = null;\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Logger } from "vite";
2
+ import type { RscRenderMessage, StreamHandlers } from "../worker/types.js";
3
+ import type { Worker as NodeWorker } from "node:worker_threads";
4
+ /**
5
+ * Handles the RSC stream from the worker.
6
+ * Creates a ReadableStream that pipes RSC chunks to the response.
7
+ *
8
+ * @param worker - The worker thread
9
+ * @param message - The RSC render message
10
+ * @returns A ReadableStream that yields RSC chunks
11
+ */
12
+ export declare function handleWorkerRscStream({ worker, message, logger, handlers, verbose }: {
13
+ worker: NodeWorker;
14
+ message: Omit<RscRenderMessage, "type" | "id">;
15
+ logger: Logger;
16
+ handlers: Pick<StreamHandlers, "onMetrics" | "onHmrAccept" | "onHmrUpdate"> & Partial<Pick<StreamHandlers, "onError" | "onData" | "onEnd">>;
17
+ verbose?: boolean;
18
+ }): ReadableStream<Uint8Array>;
19
+ //# sourceMappingURL=handleWorkerRscStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleWorkerRscStream.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/handleWorkerRscStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,OAAO,EACP,MAAM,EACN,QAAQ,EACR,OAAe,EAChB,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC,GACzE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,GAAG,cAAc,CAAC,UAAU,CAAC,CA+B7B"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * vite-plugin-react-server
3
+ * Copyright (c) Nico Brinkkemper
4
+ * MIT License
5
+ */
6
+ import { createWorkerStream } from './createWorkerStream.js';
7
+
8
+ function handleWorkerRscStream({
9
+ worker,
10
+ message,
11
+ logger,
12
+ handlers,
13
+ verbose = false
14
+ }) {
15
+ let isFlowing = false;
16
+ return new ReadableStream({
17
+ async start(controller) {
18
+ try {
19
+ if (verbose) logger.info("Starting stream");
20
+ for await (const chunk of createWorkerStream({
21
+ worker,
22
+ message,
23
+ logger,
24
+ handlers,
25
+ verbose
26
+ })) {
27
+ if (!isFlowing) {
28
+ isFlowing = true;
29
+ if (verbose) logger.info("Stream is flowing");
30
+ }
31
+ controller.enqueue(chunk);
32
+ }
33
+ } catch (error) {
34
+ controller.error(error);
35
+ } finally {
36
+ if (isFlowing) {
37
+ isFlowing = false;
38
+ if (verbose) logger.info("Stream closing");
39
+ }
40
+ controller.close();
41
+ }
42
+ }
43
+ });
44
+ }
45
+
46
+ export { handleWorkerRscStream };
47
+ //# sourceMappingURL=handleWorkerRscStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleWorkerRscStream.js","sources":["../../../plugin/react-client/handleWorkerRscStream.ts"],"sourcesContent":["import type { Logger } from \"vite\";\nimport type { RscRenderMessage, StreamHandlers } from \"../worker/types.js\";\nimport { createWorkerStream } from \"./createWorkerStream.js\";\nimport type { Worker as NodeWorker } from \"node:worker_threads\";\n/**\n * Handles the RSC stream from the worker.\n * Creates a ReadableStream that pipes RSC chunks to the response.\n *\n * @param worker - The worker thread\n * @param message - The RSC render message\n * @returns A ReadableStream that yields RSC chunks\n */\nexport function handleWorkerRscStream({\n worker,\n message,\n logger,\n handlers,\n verbose = false\n}: {\n worker: NodeWorker,\n message: Omit<RscRenderMessage, \"type\" | \"id\">,\n logger: Logger,\n handlers: Pick<StreamHandlers, \"onMetrics\" | \"onHmrAccept\" | \"onHmrUpdate\"> &\n Partial<Pick<StreamHandlers, \"onError\" | \"onData\" | \"onEnd\">>,\n verbose?: boolean\n}): ReadableStream<Uint8Array> {\n // Create a ReadableStream from the async generator\n let isFlowing = false;\n return new ReadableStream<Uint8Array>({\n async start(controller) {\n try {\n if(verbose) logger.info(\"Starting stream\");\n for await (const chunk of createWorkerStream({\n worker,\n message,\n logger,\n handlers,\n verbose\n })) {\n if (!isFlowing) {\n isFlowing = true;\n if(verbose) logger.info(\"Stream is flowing\");\n }\n controller.enqueue(chunk);\n }\n } catch (error) {\n controller.error(error);\n } finally {\n if (isFlowing) {\n isFlowing = false;\n if(verbose) logger.info(\"Stream closing\");\n }\n controller.close();\n }\n },\n });\n}\n"],"names":[],"mappings":";;;;;;;AAYO,SAAS,qBAAsB,CAAA;AAAA,EACpC,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAU,GAAA;AACZ,CAO+B,EAAA;AAE7B,EAAA,IAAI,SAAY,GAAA,KAAA;AAChB,EAAA,OAAO,IAAI,cAA2B,CAAA;AAAA,IACpC,MAAM,MAAM,UAAY,EAAA;AACtB,MAAI,IAAA;AACF,QAAG,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,iBAAiB,CAAA;AACzC,QAAA,WAAA,MAAiB,SAAS,kBAAmB,CAAA;AAAA,UAC3C,MAAA;AAAA,UACA,OAAA;AAAA,UACA,MAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA,SACD,CAAG,EAAA;AACF,UAAA,IAAI,CAAC,SAAW,EAAA;AACd,YAAY,SAAA,GAAA,IAAA;AACZ,YAAG,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,mBAAmB,CAAA;AAAA;AAE7C,UAAA,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA;AAC1B,eACO,KAAO,EAAA;AACd,QAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,OACtB,SAAA;AACA,QAAA,IAAI,SAAW,EAAA;AACb,UAAY,SAAA,GAAA,KAAA;AACZ,UAAG,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,gBAAgB,CAAA;AAAA;AAE1C,QAAA,UAAA,CAAW,KAAM,EAAA;AAAA;AACnB;AACF,GACD,CAAA;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAG,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAIV,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAcrB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAkHtE"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AACnD,OAAO,KAAK,EAIV,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAerB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CA8HtE"}
@@ -6,13 +6,14 @@
6
6
  import 'vite';
7
7
  import { resolveOptions } from '../config/resolveOptions.js';
8
8
  import { resolveUserConfig } from '../config/resolveUserConfig.js';
9
- import { resolveAutoDiscover } from '../config/resolveAutoDiscover.js';
9
+ import { resolveAutoDiscover } from '../config/autoDiscover/resolveAutoDiscover.js';
10
10
  import { configureWorkerRequestHandler } from './server.js';
11
11
  import { configurePreviewServer } from '../react-static/configurePreviewServer.js';
12
12
  import { MessageChannel } from 'node:worker_threads';
13
13
 
14
14
  let userOptions;
15
15
  let userConfig;
16
+ let configEnv;
16
17
  let root;
17
18
  let autoDiscoveredFiles;
18
19
  let hmrChannel = null;
@@ -25,9 +26,11 @@ function reactClientPlugin(options) {
25
26
  root = userOptions.projectRoot;
26
27
  return {
27
28
  name: "vite:react-client",
28
- async config(config, configEnv) {
29
+ async config(config, viteConfigEnv) {
30
+ configEnv = viteConfigEnv;
29
31
  if (typeof config.root === "string" && config.root !== root && config.root !== process.cwd() && config.root !== "") {
30
32
  root = config.root;
33
+ userOptions.projectRoot = root;
31
34
  }
32
35
  const autoDiscoverResult = await resolveAutoDiscover({
33
36
  config,
@@ -58,6 +61,18 @@ function reactClientPlugin(options) {
58
61
  userOptions
59
62
  });
60
63
  },
64
+ async writeBundle(options2, bundle) {
65
+ if (userOptions.onEvent) {
66
+ userOptions.onEvent({
67
+ type: `build.writeBundle.${userConfig.build.ssr ? "client" : "static-client"}`,
68
+ data: {
69
+ pages: [...autoDiscoveredFiles.routeMap.keys()],
70
+ options: options2,
71
+ bundle
72
+ }
73
+ });
74
+ }
75
+ },
61
76
  // setup dev server
62
77
  async configureServer(server) {
63
78
  hmrChannel = new MessageChannel();
@@ -66,9 +81,7 @@ function reactClientPlugin(options) {
66
81
  autoDiscoveredFiles,
67
82
  userOptions,
68
83
  hmrChannel,
69
- onMetrics: userOptions.onMetrics ? (metrics) => {
70
- userOptions.onMetrics?.(metrics);
71
- } : undefined
84
+ onMetrics: userOptions.onMetrics
72
85
  });
73
86
  },
74
87
  async handleHotUpdate({ file, server, read, timestamp, ...ctx }) {
@@ -77,6 +90,7 @@ function reactClientPlugin(options) {
77
90
  if (!isPageFile) return;
78
91
  const [, value] = userOptions.normalizer(file);
79
92
  const affectedRoutes = autoDiscoveredFiles.routeMap.get(value) || [];
93
+ console.log({ affectedRoutes });
80
94
  if (hmrChannel?.port1) {
81
95
  hmrChannel.port1.postMessage({
82
96
  type: "HMR_UPDATE",
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../plugin/react-client/plugin.ts"],"sourcesContent":["import { 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/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 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, configEnv) {\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 }\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\n async configurePreviewServer(server) {\n await configurePreviewServer({\n server,\n userOptions,\n });\n },\n // setup dev server\n async configureServer(server) {\n // Create HMR message channel\n hmrChannel = new MessageChannel();\n\n await configureWorkerRequestHandler({\n server,\n autoDiscoveredFiles,\n userOptions,\n hmrChannel,\n onMetrics: userOptions.onMetrics ? (metrics) => {\n userOptions.onMetrics?.(metrics);\n } : undefined,\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":[],"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 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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"}
@@ -2,5 +2,10 @@ import type { ResolvedUserOptions } from "../../types.js";
2
2
  import type { ViteDevServer } from "vite";
3
3
  import type { AutoDiscoveredFiles } from "../../types.js";
4
4
  import type { MessageChannel, Worker } from "node:worker_threads";
5
- export declare function restartWorker(server: ViteDevServer, autoDiscoveredFiles: AutoDiscoveredFiles, userOptions: ResolvedUserOptions, hmrChannel: MessageChannel): Promise<Worker | null | undefined>;
5
+ export declare function restartWorker({ server, autoDiscoveredFiles, userOptions, hmrChannel, }: {
6
+ server: ViteDevServer;
7
+ autoDiscoveredFiles: AutoDiscoveredFiles;
8
+ userOptions: ResolvedUserOptions;
9
+ hmrChannel: MessageChannel;
10
+ }): Promise<Worker | null>;
6
11
  //# sourceMappingURL=restartWorker.d.ts.map
@@ -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;AAKlE,wBAAsB,aAAa,CAC/B,MAAM,EAAE,aAAa,EACrB,mBAAmB,EAAE,mBAAmB,EACxC,WAAW,EAAE,mBAAmB,EAChC,UAAU,EAAE,cAAc,sCAgD3B"}
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"}
@@ -5,15 +5,23 @@
5
5
  */
6
6
  import { createWorker } from '../worker/createWorker.js';
7
7
  import { serializedOptions, serializedDevServerConfig } from '../helpers/serializeUserOptions.js';
8
+ import { DEFAULT_CONFIG } from '../config/defaults.js';
8
9
 
9
10
  let currentWorker = null;
10
11
  let isRestarting = false;
11
- async function restartWorker(server, autoDiscoveredFiles, userOptions, hmrChannel) {
12
- if (isRestarting) return;
12
+ async function restartWorker({
13
+ server,
14
+ autoDiscoveredFiles,
15
+ userOptions,
16
+ hmrChannel
17
+ }) {
18
+ if (isRestarting) {
19
+ throw new Error("Worker is restarting");
20
+ }
13
21
  isRestarting = true;
14
22
  try {
15
23
  if (currentWorker) {
16
- currentWorker.terminate();
24
+ currentWorker.removeAllListeners();
17
25
  currentWorker = null;
18
26
  }
19
27
  const routeCount = autoDiscoveredFiles.urlMap.size;
@@ -25,7 +33,7 @@ async function restartWorker(server, autoDiscoveredFiles, userOptions, hmrChanne
25
33
  reverseCondition: "react-server",
26
34
  currentCondition: "react-client",
27
35
  maxListeners,
28
- envPrefix: typeof server.config.envPrefix === "string" ? server.config.envPrefix : Array.isArray(server.config.envPrefix) ? server.config.envPrefix[0] : "VITE_",
36
+ envPrefix: typeof server.config.envPrefix === "string" ? server.config.envPrefix : Array.isArray(server.config.envPrefix) ? server.config.envPrefix[0] : DEFAULT_CONFIG.ENV_PREFIX,
29
37
  workerData: {
30
38
  hmrPort: hmrChannel.port2,
31
39
  resolvedConfig: serializedDevServerConfig(server.config),
@@ -35,7 +43,7 @@ async function restartWorker(server, autoDiscoveredFiles, userOptions, hmrChanne
35
43
  });
36
44
  if (workerResult.type === "success") {
37
45
  currentWorker = workerResult.worker;
38
- server.config.logger.info(
46
+ if (userOptions.verbose) server.config.logger.info(
39
47
  `[react-client] Set max listeners to ${maxListeners} for ${routeCount} routes`
40
48
  );
41
49
  } else if (workerResult.type === "error") {
@@ -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\";\n\nlet currentWorker: Worker | null = null;\nlet isRestarting = false;\n\nexport async function restartWorker(\n server: ViteDevServer,\n autoDiscoveredFiles: AutoDiscoveredFiles,\n userOptions: ResolvedUserOptions,\n hmrChannel: MessageChannel\n ) {\n if (isRestarting) return;\n isRestarting = true;\n \n try {\n // Terminate the current worker if it exists\n if (currentWorker) {\n currentWorker.terminate();\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 : \"VITE_\",\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 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":";;;;;;;;AASA,IAAI,aAA+B,GAAA,IAAA;AACnC,IAAI,YAAe,GAAA,KAAA;AAEnB,eAAsB,aAClB,CAAA,MAAA,EACA,mBACA,EAAA,WAAA,EACA,UACA,EAAA;AACA,EAAA,IAAI,YAAc,EAAA;AAClB,EAAe,YAAA,GAAA,IAAA;AAEf,EAAI,IAAA;AAEF,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,aAAA,CAAc,SAAU,EAAA;AACxB,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,WACE,OAAO,MAAA,CAAO,OAAO,SAAc,KAAA,QAAA,GAC/B,OAAO,MAAO,CAAA,SAAA,GACd,MAAM,OAAQ,CAAA,MAAA,CAAO,OAAO,SAAS,CAAA,GACrC,OAAO,MAAO,CAAA,SAAA,CAAU,CAAC,CACzB,GAAA,OAAA;AAAA,MACN,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,MAAA,CAAO,OAAO,MAAO,CAAA,IAAA;AAAA,QACnB,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 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,17 +1,6 @@
1
- import type { Logger, ViteDevServer } from "vite";
2
- import type { AutoDiscoveredFiles, RenderMetrics, ResolvedUserOptions, StreamMetrics } from "../types.js";
3
- import type { RscRenderMessage } from "../worker/types.js";
4
- import type { Worker as NodeWorker } from "node:worker_threads";
1
+ import type { ViteDevServer } from "vite";
2
+ import type { AutoDiscoveredFiles, RenderMetrics, ResolvedUserOptions } from "../types.js";
5
3
  import { MessageChannel } from "node:worker_threads";
6
- /**
7
- * Handles the RSC stream from the worker.
8
- * Creates a ReadableStream that pipes RSC chunks to the response.
9
- *
10
- * @param worker - The worker thread
11
- * @param message - The RSC render message
12
- * @returns A ReadableStream that yields RSC chunks
13
- */
14
- export declare function handleWorkerRscStream(worker: NodeWorker, message: Omit<RscRenderMessage, "type" | "id">, logger: Logger, onMetrics?: (metrics: StreamMetrics) => void): ReadableStream<Uint8Array>;
15
4
  /**
16
5
  * Configures the worker request handler.
17
6
  * @param server - The Vite dev server
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EAEb,mBAAmB,EACnB,aAAa,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAWrD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC,EAC9C,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAC3C,cAAc,CAAC,UAAU,CAAC,CAwC5B;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,EAClD,MAAM,EACN,mBAAmB,EACnB,WAAW,EAAE,YAAY,EACzB,UAAU,EACV,SAAS,GACV,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;CAC9C,iBAwJA"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EAEb,mBAAmB,EAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAe,MAAM,qBAAqB,CAAC;AAWlE;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,EAClD,MAAM,EACN,mBAAmB,EACnB,WAAW,EAAE,YAAY,EACzB,UAAU,EACV,SAAS,GACV,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;CAC9C,iBAgLA"}