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
@@ -5,93 +5,164 @@ import { register as registerTsx } from "tsx/esm/api";
5
5
  import { join } from "node:path";
6
6
  import { pluginRoot } from "../../root.js";
7
7
  import { deserializeRegExp } from "../../helpers/serializeUserOptions.js";
8
- import type { HmrAcceptMessage, HmrUpdateMessage, ReadyMessage } from "../types.js";
9
-
8
+ import type {
9
+ HmrAcceptMessage,
10
+ HmrUpdateMessage,
11
+ ReadyMessage,
12
+ } from "../types.js";
13
+ import { toError } from "../../error/toError.js";
10
14
  // Initialize worker
11
15
  if (!parentPort) {
12
16
  throw new Error("This module must be run as a worker");
13
17
  }
14
18
 
15
- // Deserialize workerData to restore RegExp objects
16
- if (workerData) {
17
- workerData.userOptions = deserializeRegExp(workerData.userOptions);
18
- }
19
+ // In test mode, we want errors to propagate up immediately
20
+ const isTestEnv = process.env["VITEST"] || process.env["NODE_ENV"] === "test";
21
+ const isDevEnv = process.env["NODE_ENV"] !== "production";
22
+ const verbose = workerData.verbose;
19
23
 
20
- // Create channels for each loader
21
- const reactLoaderChannel = new MessageChannel();
22
- const cssLoaderChannel = new MessageChannel();
23
- const envLoaderChannel = new MessageChannel();
24
-
25
-
26
- // Listen for messages from loaders
27
- reactLoaderChannel.port2.on("message", messageHandler);
28
- cssLoaderChannel.port2.on("message", messageHandler);
29
- envLoaderChannel.port2.on("message", messageHandler);
30
-
31
- const loaderPath = "file://" + join(pluginRoot, "loader/react-loader.js");
32
- const cssLoaderPath =
33
- "file://" + join(pluginRoot, "loader/css-loader.development.js");
34
- const envLoaderPath =
35
- "file://" + join(pluginRoot, "loader/env-loader.development.js");
36
-
37
- register(loaderPath, {
38
- parentURL: pluginRoot,
39
- data: { port: reactLoaderChannel.port1},
40
- transferList: [reactLoaderChannel.port1],
41
- });
42
- register(cssLoaderPath, {
43
- parentURL: pluginRoot,
44
- data: { port: cssLoaderChannel.port1, resolvedConfig: workerData.resolvedConfig },
45
- transferList: [cssLoaderChannel.port1],
46
- });
47
-
48
- // Register loaders
49
- registerTsx();
50
-
51
- // Register env-loader (ensure this the last)
52
- register(envLoaderPath, {
53
- parentURL: pluginRoot,
54
- data: { port: envLoaderChannel.port1, resolvedConfig: workerData.resolvedConfig },
55
- transferList: [envLoaderChannel.port1],
56
- });
57
- // Set up message handling
58
- parentPort!.on("message", messageHandler);
59
-
60
- const { hmrPort } = workerData;
61
- if (hmrPort) {
62
- // Start the message port
63
- hmrPort.start();
64
-
65
- // Listen for file changes
66
- hmrPort.on("message", (message: any) => {
67
- if (message.type === "HMR_UPDATE") {
68
- // Invalidate the module in the worker
69
- parentPort!.postMessage({
70
- type: "HMR_UPDATE",
71
- id: message.id,
72
- routes: message.routes,
73
- } satisfies HmrUpdateMessage);
24
+ const developmentMessageHandler = (msg: any) => {
25
+ if (verbose) {
26
+ if ("chunk" in msg) {
27
+ let preview = Buffer.from(msg.chunk).toString("utf-8");
28
+ console.log(`[rsc-worker:${msg.type}] ${preview}`);
29
+ } else {
30
+ console.log(`[rsc-worker:${msg.type}] ${JSON.stringify(msg)}`);
74
31
  }
32
+ }
33
+ messageHandler(msg);
34
+ };
35
+
36
+ const developmentCssLoaderMessageHandler = (msg: any) => {
37
+ if (verbose) {
38
+ console.log(`[css-loader:${msg.type}] ${JSON.stringify(msg)}`);
39
+ }
40
+ messageHandler(msg);
41
+ };
42
+
43
+ const developmentEnvLoaderMessageHandler = (msg: any) => {
44
+ if (verbose) {
45
+ console.log(`[env-loader:${msg.type}] ${JSON.stringify(msg)}`);
46
+ }
47
+ messageHandler(msg);
48
+ };
49
+
50
+ const developmentReactLoaderMessageHandler = (msg: any) => {
51
+ if (verbose) {
52
+ console.log(`[react-loader:${msg.type}] ${JSON.stringify(msg)}`);
53
+ }
54
+ messageHandler(msg);
55
+ };
56
+
57
+ try {
58
+ // Deserialize workerData to restore RegExp objects
59
+ if (workerData) {
60
+ workerData.userOptions = deserializeRegExp(workerData.userOptions);
61
+ }
62
+
63
+ // Create channels for each loader
64
+ const reactLoaderChannel = new MessageChannel();
65
+ const cssLoaderChannel = new MessageChannel();
66
+ const envLoaderChannel = new MessageChannel();
67
+
68
+ // Set up message handlers before transferring ports
69
+ reactLoaderChannel.port1.on("message", developmentReactLoaderMessageHandler);
70
+ cssLoaderChannel.port1.on("message", developmentCssLoaderMessageHandler);
71
+ envLoaderChannel.port1.on("message", developmentEnvLoaderMessageHandler);
72
+
73
+ const reactLoaderPath =
74
+ "file://" + join(pluginRoot, "loader/react-loader.server.js");
75
+ const cssLoaderPath =
76
+ "file://" + join(pluginRoot, "loader/css-loader.development.js");
77
+ const envLoaderPath =
78
+ "file://" + join(pluginRoot, "loader/env-loader.development.js");
79
+
80
+ // Register loaders with their ports
81
+ register(reactLoaderPath, {
82
+ parentURL: pluginRoot,
83
+ data: {
84
+ id: "react-loader",
85
+ port: reactLoaderChannel.port1,
86
+ userOptions: workerData.userOptions,
87
+ },
88
+ transferList: [reactLoaderChannel.port1],
75
89
  });
90
+ register(cssLoaderPath, {
91
+ parentURL: pluginRoot,
92
+ data: {
93
+ id: "css-loader",
94
+ port: cssLoaderChannel.port1,
95
+ resolvedConfig: workerData.resolvedConfig,
96
+ },
97
+ transferList: [cssLoaderChannel.port1],
98
+ });
99
+
100
+ // Register loaders
101
+ registerTsx();
76
102
 
77
- // Listen for HMR updates
78
- hmrPort.on("message", (message: any) => {
79
- // Handle the update
80
- parentPort!.postMessage({
81
- type: "HMR_ACCEPT",
82
- id: message.id,
83
- routes: message.routes,
84
- } satisfies HmrAcceptMessage);
103
+ // Register env-loader (ensure this the last)
104
+ register(envLoaderPath, {
105
+ parentURL: pluginRoot,
106
+ data: {
107
+ port: envLoaderChannel.port1,
108
+ resolvedConfig: workerData.resolvedConfig,
109
+ },
110
+ transferList: [envLoaderChannel.port1],
85
111
  });
86
- }
87
112
 
88
- // Notify parent that we're ready
89
- parentPort!.postMessage({
90
- type: "READY",
91
- env: process.env["NODE_ENV"],
92
- pid: process.pid,
93
- } satisfies ReadyMessage);
113
+ // Set up message handling
114
+ parentPort!.on("message", developmentMessageHandler);
115
+
116
+ const { hmrPort } = workerData;
117
+ if (hmrPort) {
118
+ // Start the message port
119
+ hmrPort.start();
120
+
121
+ // Listen for HMR messages
122
+ hmrPort.on("message", (message: any) => {
123
+ if (message.type === "HMR_UPDATE") {
124
+ // Invalidate the module in the worker
125
+ parentPort!.postMessage({
126
+ type: "HMR_UPDATE",
127
+ id: message.id,
128
+ routes: message.routes,
129
+ } satisfies HmrUpdateMessage);
130
+ } else if (message.type === "HMR_ACCEPT") {
131
+ // Handle the update
132
+ parentPort!.postMessage({
133
+ type: "HMR_ACCEPT",
134
+ id: message.id,
135
+ routes: message.routes,
136
+ } satisfies HmrAcceptMessage);
137
+ }
138
+ });
139
+ }
140
+
141
+ // Notify parent that we're ready
142
+ parentPort!.postMessage({
143
+ type: "READY",
144
+ env: process.env["NODE_ENV"],
145
+ pid: process.pid,
146
+ id: "rsc-worker",
147
+ } satisfies ReadyMessage);
94
148
 
95
- if (process.env["NODE_ENV"] === "production") {
96
- throw new Error("This module should not run in production mode.");
149
+ if (process.env["NODE_ENV"] === "production") {
150
+ throw new Error("This module should not run in production mode.");
151
+ }
152
+ } catch (error) {
153
+ if (isDevEnv) {
154
+ console.error(error);
155
+ }
156
+ // In dev mode, try to send error message before exiting
157
+ if (parentPort) {
158
+ parentPort?.postMessage({
159
+ type: "ERROR",
160
+ id: "rsc-worker",
161
+ error: toError(error),
162
+ });
163
+ }
164
+ if (!isDevEnv || isTestEnv) {
165
+ // In test mode or production mode, just throw the error to fail fast
166
+ throw error;
167
+ }
97
168
  }
@@ -30,4 +30,4 @@ envLoaderChannel.port2.on("message", messageHandler);
30
30
  parentPort.on("message", messageHandler);
31
31
 
32
32
  // Signal ready
33
- parentPort.postMessage({ type: "READY", env: process.env["NODE_ENV"], pid: process.pid } satisfies ReadyMessage);
33
+ parentPort.postMessage({ type: "READY", id: "rsc-worker", env: process.env["NODE_ENV"], pid: process.pid } satisfies ReadyMessage);
@@ -11,6 +11,8 @@ export const activeStreams = new Map<string, PassThrough>();
11
11
  // Track CSS files
12
12
  export const cssFiles = new Map<string, CssContent>();
13
13
 
14
+ // Track module IDs
15
+ export const moduleIds = new Map<string, string>();
14
16
 
15
17
  export const hmrState = new Map<string, HmrState>();
16
18
 
@@ -104,4 +106,12 @@ export function getInvalidatedModules(): string[] {
104
106
  return Array.from(hmrState.entries())
105
107
  .filter(([_, state]) => state.invalidated)
106
108
  .map(([path]) => path);
109
+ }
110
+
111
+ export function addModuleId(id: string, url: string) {
112
+ moduleIds.set(id, url);
113
+ }
114
+
115
+ export function getModuleId(id: string): string | undefined {
116
+ return moduleIds.get(id);
107
117
  }
@@ -1,8 +1,14 @@
1
1
  import { cleanObject } from "../helpers/cleanObject.js";
2
- import type { HtmlWorkerOutputMessage, RscWorkerOutputMessage } from "./types.js";
2
+ import type {
3
+ HtmlWorkerOutputMessage,
4
+ RscWorkerOutputMessage,
5
+ } from "./types.js";
3
6
  import { parentPort } from "node:worker_threads";
4
7
 
5
- export function sendMessage(msg: HtmlWorkerOutputMessage | RscWorkerOutputMessage, port = parentPort) {
8
+ export function sendMessage(
9
+ msg: HtmlWorkerOutputMessage | RscWorkerOutputMessage,
10
+ port = parentPort
11
+ ) {
6
12
  if (!port) {
7
13
  console.error("[Worker] No port available to send message");
8
14
  return;
@@ -10,17 +16,20 @@ export function sendMessage(msg: HtmlWorkerOutputMessage | RscWorkerOutputMessag
10
16
 
11
17
  try {
12
18
  // Handle error messages
13
- if ('error' in msg) {
19
+ if ("error" in msg) {
14
20
  const error = msg.error;
15
- const serializedError = error instanceof Error ? {
16
- message: error.message,
17
- stack: error.stack,
18
- name: error.name,
19
- cause: error.cause,
20
- } : {
21
- message: String(error),
22
- name: 'Error',
23
- };
21
+ const serializedError =
22
+ error instanceof Error
23
+ ? {
24
+ message: error.message,
25
+ stack: error.stack,
26
+ name: error.name,
27
+ cause: error.cause,
28
+ }
29
+ : {
30
+ message: String(error),
31
+ name: "Error",
32
+ };
24
33
 
25
34
  port.postMessage({
26
35
  ...cleanObject(msg),
@@ -38,7 +47,7 @@ export function sendMessage(msg: HtmlWorkerOutputMessage | RscWorkerOutputMessag
38
47
  type: "ERROR",
39
48
  error: {
40
49
  message: err instanceof Error ? err.message : String(err),
41
- name: err instanceof Error ? err.name : 'Error',
50
+ name: err instanceof Error ? err.name : "Error",
42
51
  },
43
52
  });
44
53
  } catch {
@@ -46,4 +55,13 @@ export function sendMessage(msg: HtmlWorkerOutputMessage | RscWorkerOutputMessag
46
55
  console.error("[Worker] Critical error - could not send error message");
47
56
  }
48
57
  }
49
- }
58
+ }
59
+
60
+ export const sendRscWorkerMessage = sendMessage as (
61
+ msg: RscWorkerOutputMessage,
62
+ port?: MessagePort
63
+ ) => void;
64
+ export const sendHtmlWorkerMessage = sendMessage as (
65
+ msg: HtmlWorkerOutputMessage,
66
+ port?: MessagePort
67
+ ) => void;
@@ -2,8 +2,11 @@ import type { RenderToPipeableStreamOptions } from "react-dom/server";
2
2
  import type {
3
3
  CreateHandlerOptions,
4
4
  CssContent,
5
+ InlineCssOpt,
6
+ PagePropOpt,
5
7
  StreamMetrics,
6
8
  } from "../types.js";
9
+ import type { MessagePort } from "node:worker_threads";
7
10
 
8
11
  // Base message types
9
12
  export interface WorkerMessage {
@@ -73,16 +76,20 @@ export interface ChunkErrorMessage extends WorkerMessage {
73
76
  }
74
77
 
75
78
  export type StreamHandlers = {
76
- onError: (error: any, errorInfo?: any) => void;
77
- onData: (data: any) => void;
78
- onEnd: () => void;
79
- onMetrics: (metrics: any) => void;
80
- onHmrAccept: (routes: string[]) => void;
81
- onHmrUpdate: (routes: string[]) => void;
82
- }
79
+ onError: (id: string, error: any, errorInfo?: any) => void;
80
+ onData: (id: string, data: any) => void;
81
+ onEnd: (id: string) => void;
82
+ onMetrics: (id: string, metrics: any) => void;
83
+ onHmrAccept: (id: string, routes?: string[]) => void;
84
+ onHmrUpdate: (id: string, routes?: string[]) => void;
85
+ onServerAction?: (id: string, args: unknown[]) => void;
86
+ onServerActionResponse?: (id: string, result?: unknown, error?: string) => void;
87
+ onServerModule?: (id: string, url: string, source: string) => void;
88
+ onShutdown?: (id: string) => void;
89
+ };
83
90
 
84
91
  // RSC Messages
85
- export type RscRenderMessage = WorkerMessage & {
92
+ export type RscRenderMessage<T extends PagePropOpt = PagePropOpt> = WorkerMessage & {
86
93
  type: "RSC_RENDER";
87
94
  } & Omit<
88
95
  CreateHandlerOptions,
@@ -96,7 +103,7 @@ export type RscRenderMessage = WorkerMessage & {
96
103
  | "autoDiscover"
97
104
  > & {
98
105
  build: Omit<
99
- CreateHandlerOptions["build"],
106
+ CreateHandlerOptions<T>,
100
107
  "entryFileNames" | "chunkFileNames" | "assetFileNames" | "pages"
101
108
  > & {pages: string[]};
102
109
  };
@@ -158,79 +165,77 @@ export type ExtendedCssContent = CssContent & {
158
165
  usedClasses?: string[];
159
166
  };
160
167
 
168
+ export type CleanupMessage = {
169
+ type: "CLEANUP";
170
+ id: string;
171
+ }
172
+
173
+ export type CleanupCompleteMessage = {
174
+ type: "CLEANUP_COMPLETE";
175
+ id: string;
176
+ }
177
+
178
+ export type RouteReadyMessage<InlineCss extends InlineCssOpt = InlineCssOpt> = {
179
+ type: "ROUTE_READY";
180
+ id: string;
181
+ moduleRootPath: string;
182
+ moduleBaseURL: string;
183
+ projectRoot: string;
184
+ cssFiles: Map<string, CssContent<InlineCss>>;
185
+ pipeableStreamOptions: Omit<ReactServerDomEsmOptions, "onError" | "onPostpone">;
186
+ }
187
+
161
188
  // HTML Worker Messages
162
189
  export type HtmlWorkerInputMessage =
163
190
  | RscChunkInputMessage
164
191
  | RscEndMessage
165
192
  | ShutdownMessage
166
- | {
167
- type: "CLEANUP";
168
- id: string;
169
- }
170
- | {
171
- type: "FORCE_CLEANUP";
172
- id: string;
173
- }
174
- | {
175
- type: "INITIALIZED_REACT_LOADER";
176
- id: string;
177
- }
178
- | {
179
- type: "INITIALIZED_CSS_LOADER";
180
- id: string;
181
- }
182
- | {
183
- type: "ACKNOWLEDGE";
184
- id: string;
185
- error?: string;
186
- }
187
- | {
188
- type: "HTML_COMPLETE";
189
- id: string;
190
- success: boolean;
191
- html?: string;
192
- metrics?: StreamMetrics;
193
- }
194
- | {
195
- type: "ROUTE_READY";
196
- id: string;
197
- moduleRootPath: string;
198
- moduleBaseURL: string;
199
- projectRoot: string;
200
- cssFiles: Map<string, CssContent>;
201
- pipeableStreamOptions: Omit<ReactServerDomEsmOptions, "onError" | "onPostpone">;
202
- }
193
+ | CleanupMessage
194
+ | CleanupCompleteMessage
195
+ | InitializedReactLoaderMessage
196
+ | InitializedCssLoaderMessage
197
+ | RouteReadyMessage
198
+
199
+ export type HtmlChunkMessage = {
200
+ type: "HTML_CHUNK";
201
+ id: string;
202
+ chunk: string;
203
+ encoding: string;
204
+ }
205
+
206
+ export type HtmlCompleteMessage = {
207
+ type: "HTML_COMPLETE";
208
+ id: string;
209
+ success: boolean;
210
+ html?: string;
211
+ chunks?: string[];
212
+ metrics?: StreamMetrics;
213
+ }
203
214
 
204
215
  export type HtmlWorkerOutputMessage =
205
- | {
206
- type: "HTML_COMPLETE";
207
- id: string;
208
- success: boolean;
209
- html?: string;
210
- chunks?: string[];
211
- metrics?: StreamMetrics;
212
- }
216
+ | HtmlCompleteMessage
213
217
  | ErrorMessage
214
218
  | ShellReadyMessage
215
219
  | ChunkProcessedMessage
216
220
  | ChunkErrorMessage
217
221
  | AllReadyMessage
218
222
  | ShellErrorMessage
219
- | { type: "HTML_CHUNK"; id: string; chunk: string; encoding: string }
220
- | { type: "CLEANUP_COMPLETE"; id: string }
221
- | { type: "SHUTDOWN_COMPLETE"; id: string }
223
+ | HtmlChunkMessage
224
+ | ShutdownCompleteMessage
222
225
  | HmrAcceptMessage
223
- | ReadyMessage;
226
+ | ReadyMessage
227
+ | ServerActionMessage
228
+ | ServerActionResponseMessage
229
+ | ErrorMessage
230
+ | CleanupCompleteMessage
224
231
 
225
232
  export type InitializedReactLoaderMessage = {
226
233
  type: "INITIALIZED_REACT_LOADER";
227
234
  id: string;
228
- port: MessagePort;
229
235
  }
230
236
  export type InitializedCssLoaderMessage = {
231
237
  type: "INITIALIZED_CSS_LOADER";
232
238
  id: string;
233
- port: MessagePort;
234
239
  }
235
240
 
236
241
  export type InitializedRscWorkerLoaderMessage = {
@@ -280,7 +285,10 @@ export type RscWorkerInputMessage =
280
285
  | InitializedEnvLoaderMessage
281
286
  | HmrUpdateMessage
282
287
  | HmrAcceptMessage
283
- | { type: "HMR_CLEANUP"; id: string; routes?: string[] };
288
+ | HmrCleanupMessage
289
+ | CleanupCompleteMessage
290
+ | ServerActionMessage
291
+ | ServerModuleMessage;
284
292
 
285
293
  export interface CssFileRequestMessage extends WorkerMessage {
286
294
  type: "CSS_FILE_REQUEST";
@@ -313,8 +321,26 @@ export interface CssProcessedMessage extends WorkerMessage {
313
321
 
314
322
  export type ReadyMessage = {
315
323
  type: "READY";
316
- env: string | undefined;
317
- pid: number;
324
+ id: string;
325
+ env?: string;
326
+ pid?: number;
327
+ }
328
+
329
+ export type ShutdownCompleteMessage = {
330
+ type: "SHUTDOWN_COMPLETE";
331
+ id: string;
332
+ }
333
+
334
+ export interface ServerActionMessage extends WorkerMessage {
335
+ type: "SERVER_ACTION";
336
+ args: unknown[];
337
+ }
338
+
339
+ export interface ServerActionResponseMessage extends WorkerMessage {
340
+ type: "SERVER_ACTION_RESPONSE";
341
+ id: string;
342
+ result?: unknown;
343
+ error?: string;
318
344
  }
319
345
 
320
346
  export type RscWorkerOutputMessage =
@@ -333,7 +359,10 @@ export type RscWorkerOutputMessage =
333
359
  | HmrAcceptMessage
334
360
  | HmrUpdateMessage
335
361
  | ReadyMessage
336
- | { type: "SHUTDOWN_COMPLETE"; id: string };
362
+ | ServerActionMessage
363
+ | ServerActionResponseMessage
364
+ | ShutdownCompleteMessage
365
+ | ServerModuleMessage;
337
366
 
338
367
  export interface ClientReferenceMessage extends WorkerMessage {
339
368
  type: "CLIENT_REFERENCE";
@@ -400,3 +429,9 @@ export type LoaderMessage = {
400
429
  port?: MessagePort;
401
430
  importMap?: string;
402
431
  };
432
+
433
+ export interface ServerModuleMessage extends WorkerMessage {
434
+ type: "SERVER_MODULE";
435
+ url: string;
436
+ source: string;
437
+ }
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sources":["../../../plugin/react-client/server.ts"],"sourcesContent":["import type { ViteDevServer } from \"vite\";\nimport type {\n AutoDiscoveredFiles,\n RenderMetrics,\n RequestHandler,\n ResolvedUserOptions,\n StreamMetrics,\n} from \"../types.js\";\nimport { MessageChannel, type Worker } from \"node:worker_threads\";\nimport { serializedOptions } from \"../helpers/serializeUserOptions.js\";\nimport { requestInfo } from \"../helpers/requestInfo.js\";\nimport { performance } from \"node:perf_hooks\";\nimport { restartWorker } from \"./restartWorker.js\";\nimport { handleWorkerRscStream } from \"./handleWorkerRscStream.js\";\nimport { getRouteFiles } from \"../helpers/getRouteFiles.js\";\nimport type { RscWorkerInputMessage } from \"../worker/types.js\";\nimport { Readable } from \"node:stream\";\nimport { ReadableStream } from \"node:stream/web\";\n\n/**\n * Configures the worker request handler.\n * @param server - The Vite dev server\n * @param autoDiscoveredFiles - The auto discovered files\n * @param userOptions - The user options\n */\nexport async function configureWorkerRequestHandler({\n server,\n autoDiscoveredFiles,\n userOptions: _userOptions,\n hmrChannel,\n onMetrics,\n}: {\n server: ViteDevServer;\n autoDiscoveredFiles: AutoDiscoveredFiles;\n userOptions: ResolvedUserOptions;\n hmrChannel: MessageChannel;\n onMetrics?: (metrics: RenderMetrics) => void;\n}) {\n let {\n // remove these\n projectRoot: _projectRoot,\n moduleBaseURL: _moduleBaseURL,\n ...handlerUserOptions\n } = _userOptions;\n const handlerOptions = Object.assign({}, handlerUserOptions, {\n moduleBaseURL: server.config.base,\n moduleBasePath: server.config.base,\n projectRoot: server.config.root,\n });\n\n // Start the worker\n let currentWorker: Worker | null = null;\n const logger = server.config.logger;\n\n // Handle server restarts\n server.ws.on(\"restart\", async () => {\n logger.info(\"[react-client] Server restarting, shutting down worker...\");\n if (currentWorker) {\n currentWorker.postMessage({\n type: \"SHUTDOWN\",\n id: \"*\",\n } satisfies RscWorkerInputMessage);\n await new Promise((resolve, reject) => {\n currentWorker?.on(\"message\", (message) => {\n if (message.type === \"SHUTDOWN_COMPLETE\") {\n resolve(true);\n } else {\n reject(\"Did not receive SHUTDOWN_COMPLETE\");\n }\n });\n });\n currentWorker.removeAllListeners();\n currentWorker = null;\n }\n });\n\n // Create the request handler\n const handler: RequestHandler = async (req, res, next) => {\n if (!req.url) return next();\n if (handlerOptions.verbose) logger.info(`Received request: ${req.url}`);\n\n const info = requestInfo(req, handlerOptions, \"\");\n if (!info.isRscRequest) return next();\n if (handlerOptions.verbose)\n logger.info(`Request info: ${JSON.stringify(info)}`);\n\n const routeFiles = await getRouteFiles(\n info.route,\n autoDiscoveredFiles,\n handlerOptions\n );\n if (routeFiles.type === \"error\") {\n logger.error(routeFiles.error.message);\n return next();\n }\n const pagePath = routeFiles.page;\n const propsPath = routeFiles.props;\n try {\n // Set up response headers for streaming\n res.setHeader(\"Content-Type\", info.contentType);\n res.setHeader(\"Transfer-Encoding\", \"chunked\");\n res.setHeader(\"Connection\", \"keep-alive\");\n\n const serializedUserOptions = serializedOptions(\n handlerOptions,\n autoDiscoveredFiles\n );\n const userOnMetrics =\n typeof onMetrics === \"function\"\n ? (metrics: StreamMetrics) => {\n const elapsedTime = performance.now() - startTime;\n const formattedMetrics = {\n route: info.route,\n htmlSize: 0,\n rscSize: metrics.bytes,\n processingTime: elapsedTime,\n chunks: metrics.chunks,\n chunkRate: metrics.chunks / (elapsedTime / 1000),\n memoryUsage: process.memoryUsage(),\n streamMetrics: {\n ...metrics,\n duration: elapsedTime,\n },\n htmlSizes: new Map(),\n rscSizes: new Map([[info.route, metrics.bytes]]),\n } satisfies RenderMetrics;\n onMetrics(formattedMetrics);\n }\n : () => {};\n const startTime = performance.now();\n if (!currentWorker) {\n currentWorker = await restartWorker({\n server,\n autoDiscoveredFiles,\n userOptions: serializedUserOptions,\n hmrChannel,\n });\n }\n const stream = handleWorkerRscStream({\n worker: currentWorker!,\n message: {\n ...serializedUserOptions,\n // we make the worker stream aware of the route, pagePath, propsPath\n route: info.route,\n pagePath: pagePath,\n propsPath: propsPath,\n // override these at all times to ensure the settings will work for the dev server\n projectRoot: server.config.root,\n build: serializedUserOptions.build,\n manifest: autoDiscoveredFiles.staticManifest,\n cssFiles: new Map(),\n globalCss: new Map(),\n },\n logger,\n handlers: {\n onMetrics: userOnMetrics,\n onHmrAccept: () => {\n // TODO: implement\n // console.log(\"onHmrAccept\", routes);\n },\n onHmrUpdate: () => {\n // TODO: implement\n // console.log(\"onHmrUpdate\", routes);\n },\n },\n verbose: handlerOptions.verbose,\n });\n\n // Pipe the stream to the response\n if (res.writable) {\n Readable.fromWeb(stream as unknown as ReadableStream).pipe(res);\n }\n // wait for timeout\n } catch (error) {\n if (error instanceof Error) {\n server.config.logger.error(error.message + (error.stack ?? \"\"), {\n error,\n });\n }\n }\n let timeout: NodeJS.Timeout;\n try {\n await new Promise((reject) => {\n timeout = setTimeout(() => {\n clearTimeout(timeout);\n reject(new Error(\"RSC Render timeout\"));\n }, 5000);\n });\n } catch {\n if (currentWorker) {\n currentWorker.postMessage({\n type: \"SHUTDOWN\",\n id: \"*\",\n } satisfies RscWorkerInputMessage);\n await new Promise((resolve, reject) => {\n currentWorker?.on(\"message\", (message) => {\n if (message.type === \"SHUTDOWN_COMPLETE\") {\n resolve(true);\n } else {\n reject(\"Dit not receive SHUTDOWN_COMPLETE\");\n }\n });\n });\n currentWorker.removeAllListeners();\n }\n server.config.logger.error(\"RSC render timeout.\");\n clearTimeout(timeout!);\n res.end();\n }\n };\n // attach handler to the server\n server.middlewares.use(handler);\n // done\n}\n"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import type { Manifest, ViteDevServer } from "vite";
2
- import type { AutoDiscoveredFiles, ResolvedUserOptions } from "../types.js";
3
- export declare function configureReactServer({ server, autoDiscoveredFiles, userOptions: _userOptions, serverManifest, }: {
4
- server: ViteDevServer;
5
- autoDiscoveredFiles: AutoDiscoveredFiles;
6
- userOptions: ResolvedUserOptions;
7
- serverManifest: Manifest;
8
- }): Promise<void>;
9
- //# sourceMappingURL=server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAU5E,wBAAsB,oBAAoB,CAAC,EACzC,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;IACjC,cAAc,EAAE,QAAQ,CAAC;CAC1B,iBAoIA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sources":["../../../plugin/react-server/server.ts"],"sourcesContent":["import type { Manifest, ViteDevServer } from \"vite\";\nimport type { ServerResponse } from \"http\";\nimport type { AutoDiscoveredFiles, ResolvedUserOptions } 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 { toError } from \"../error/toError.js\";\n\nexport async function configureReactServer({\n server,\n autoDiscoveredFiles,\n userOptions: _userOptions,\n serverManifest,\n}: {\n server: ViteDevServer;\n autoDiscoveredFiles: AutoDiscoveredFiles;\n userOptions: ResolvedUserOptions;\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 = Object.assign({}, handlerUserOptions, {\n moduleBaseURL: server.config.base,\n projectRoot: server.config.root,\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, \"\");\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 = await 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 server.config.logger.error(toError(error).message);\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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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.client.js","sources":["../../../plugin/transformer/plugin.client.ts"],"sourcesContent":["import { resolveOptions } from \"../config/resolveOptions.js\";\nimport type { ResolvedUserOptions, StreamPluginOptions } from \"../types.js\";\nimport { type Manifest, type Plugin } from \"vite\";\nimport { transformModuleIfNeeded } from \"../loader/react-loader.js\";\nimport { join } from \"node:path\";\nimport { tryManifest } from \"../helpers/tryManifest.js\";\n\n/**\n * Plugin for transforming server actions for the client build.\n *\n * Core responsibilities:\n * 1. Transforms \"use server\" directives\n * 2. Transforms server actions for the client build\n * 3. Uses react-loader's transformModuleIfNeeded to create a server action reference\n *\n * When a component is marked with \"use server\", it:\n * - Gets transformed into a server action\n * - Maintains module ID for RSC boundaries\n * - Preserves class/function behavior\n *\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [\n * viteReactClientTransformPlugin({\n * projectRoot: process.cwd(),\n * })\n * ]\n * });\n * ```\n */\nlet isBuild = true;\n\nexport function reactTransformPlugin(options: StreamPluginOptions): Plugin {\n let userOptions: ResolvedUserOptions;\n const resolvedOptionsResult = resolveOptions(options);\n if (resolvedOptionsResult.type === \"error\") throw resolvedOptionsResult.error;\n userOptions = resolvedOptionsResult.userOptions;\n let staticManifest: Manifest;\n\n return {\n name: \"vite:react-server-action-transform\",\n enforce: \"pre\",\n async config(_, configEnv) {\n isBuild = configEnv.command !== \"serve\";\n if (!configEnv.isSsrBuild) {\n staticManifest = {};\n } else {\n const staticManifestResult = await tryManifest({\n root: userOptions.projectRoot,\n ssrManifest: false,\n outDir: join(userOptions.build.outDir, userOptions.build.static),\n });\n if (staticManifestResult.type === \"error\") {\n staticManifest = {};\n } else {\n staticManifest = staticManifestResult.manifest;\n }\n }\n },\n async transform(code, id, options) {\n const ssr = options?.ssr;\n const isServer = code.match('\"use server\"') !== null;\n const isClient = code.match('\"use client\"') !== null;\n if (!ssr) return null;\n if (!isServer && !isClient) return null;\n if (isServer && isClient) {\n throw new Error(\n \"Server and client components cannot be used in the same file\"\n );\n }\n if (isClient) {\n return null;\n }\n const [key, value] = userOptions.normalizer(id);\n if (isServer && isBuild) {\n id = key + \".js\";\n }\n const finalID = userOptions.moduleID(value);\n const transformed = await transformModuleIfNeeded(code, finalID, null);\n if (!transformed) return null;\n return {\n code: transformed,\n id: finalID,\n map: null,\n };\n },\n renderChunk(code, chunk, _options) {\n // Only process client components\n if (!chunk.fileName.includes(\".client\")) return null;\n\n // Get the original file name without extension\n const originalName = chunk.fileName.replace(userOptions.autoDiscover.moduleExtension, \"\");\n\n // Find matching entry in static manifest\n const manifestEntry = Object.entries(staticManifest).find(([_, info]) =>\n info.file.startsWith(originalName)\n );\n\n if (manifestEntry) {\n // Use the static manifest's file name\n return {\n code,\n fileName: manifestEntry[1].file,\n };\n }\n\n return null;\n },\n };\n}\n"],"names":["options"],"mappings":"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"}