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
@@ -1,1004 +1,6 @@
1
- import * as acorn from "acorn-loose";
2
- import { basename } from "path";
1
+ import { getCondition } from "../config/getCondition.js"
3
2
 
4
- import {
5
- // @ts-ignore
6
- setSourceMapsSupport,
7
- SourceMap,
8
- type LoadHookContext,
9
- type ResolveHookContext,
10
- } from "node:module";
11
- import type { MessagePort } from "node:worker_threads";
12
- import type { LoaderContext } from "../types.js";
13
- import { env } from '../utils/env.js';
3
+ const condition = getCondition('')
4
+ const loader = await import(`react-loader.${condition}.ts`);
14
5
 
15
- let stashedGetSource: any = null;
16
- let stashedResolve: any = null;
17
-
18
- // Enable source maps with full support
19
- setSourceMapsSupport(true, {
20
- nodeModules: true, // Enable for node_modules files
21
- generatedCode: true, // Enable for generated code
22
- });
23
-
24
-
25
- // Store port globally for use in load hook
26
- export let loaderPort: MessagePort | undefined;
27
- // during development, we actually just want to be explicit about the .node extension
28
- let isDev = process.env["NODE_ENV"] === "development";
29
-
30
- export async function getSource(
31
- url: string,
32
- context: any,
33
- defaultGetSource: any
34
- ) {
35
- // We stash this in case we end up needing to resolve export * statements later.
36
- stashedGetSource = defaultGetSource;
37
- return defaultGetSource(url, context, defaultGetSource);
38
- }
39
-
40
- function addExportedEntry(
41
- exportedEntries: any,
42
- localNames: any,
43
- localName: any,
44
- exportedName: any,
45
- type: any,
46
- loc: any
47
- ) {
48
- if (localNames.has(localName)) {
49
- // If the same local name is exported more than once, we only need one of the names.
50
- return;
51
- }
52
-
53
- exportedEntries.push({
54
- localName,
55
- exportedName,
56
- type,
57
- loc,
58
- originalLine: -1,
59
- originalColumn: -1,
60
- originalSource: -1,
61
- nameIndex: -1,
62
- });
63
- }
64
-
65
- function addLocalExportedNames(
66
- exportedEntries: any,
67
- localNames: any,
68
- node: any
69
- ) {
70
- switch (node.type) {
71
- case "Identifier":
72
- addExportedEntry(
73
- exportedEntries,
74
- localNames,
75
- node.name,
76
- node.name,
77
- null,
78
- node.loc
79
- );
80
- return;
81
-
82
- case "ObjectPattern":
83
- for (let i = 0; i < node.properties.length; i++)
84
- addLocalExportedNames(exportedEntries, localNames, node.properties[i]);
85
-
86
- return;
87
-
88
- case "ArrayPattern":
89
- for (let i = 0; i < node.elements.length; i++) {
90
- const element = node.elements[i];
91
- if (element)
92
- addLocalExportedNames(exportedEntries, localNames, element);
93
- }
94
-
95
- return;
96
-
97
- case "Property":
98
- addLocalExportedNames(exportedEntries, localNames, node.value);
99
- return;
100
-
101
- case "AssignmentPattern":
102
- addLocalExportedNames(exportedEntries, localNames, node.left);
103
- return;
104
-
105
- case "RestElement":
106
- addLocalExportedNames(exportedEntries, localNames, node.argument);
107
- return;
108
-
109
- case "ParenthesizedExpression":
110
- addLocalExportedNames(exportedEntries, localNames, node.expression);
111
- return;
112
- }
113
- }
114
-
115
- function transformServerModule(
116
- source: string,
117
- program: any,
118
- url: string,
119
- sourceMap: any,
120
- _loader: any,
121
- port: MessagePort | undefined
122
- ) {
123
- const body = program.body; // This entry list needs to be in source location order.
124
-
125
- const exportedEntries: any[] = []; // Dedupe set.
126
-
127
- const localNames = new Set();
128
-
129
- for (let i = 0; i < body.length; i++) {
130
- const node = body[i];
131
-
132
- switch (node.type) {
133
- case "ExportAllDeclaration":
134
- // If export * is used, the other file needs to explicitly opt into "use server" too.
135
- break;
136
-
137
- case "ExportDefaultDeclaration":
138
- if (node.declaration.type === "Identifier") {
139
- addExportedEntry(
140
- exportedEntries,
141
- localNames,
142
- node.declaration.name,
143
- "default",
144
- null,
145
- node.declaration.loc
146
- );
147
- } else if (node.declaration.type === "FunctionDeclaration") {
148
- if (node.declaration.id) {
149
- addExportedEntry(
150
- exportedEntries,
151
- localNames,
152
- node.declaration.id.name,
153
- "default",
154
- "function",
155
- node.declaration.id.loc
156
- );
157
- }
158
- }
159
-
160
- continue;
161
-
162
- case "ExportNamedDeclaration":
163
- if (node.declaration) {
164
- if (node.declaration.type === "VariableDeclaration") {
165
- const declarations = node.declaration.declarations;
166
-
167
- for (let j = 0; j < declarations.length; j++) {
168
- addLocalExportedNames(
169
- exportedEntries,
170
- localNames,
171
- declarations[j].id
172
- );
173
- }
174
- } else {
175
- const name = node.declaration.id.name;
176
- addExportedEntry(
177
- exportedEntries,
178
- localNames,
179
- name,
180
- name,
181
- node.declaration.type === "FunctionDeclaration"
182
- ? "function"
183
- : null,
184
- node.declaration.id.loc
185
- );
186
- }
187
- }
188
-
189
- if (node.specifiers) {
190
- const specifiers = node.specifiers;
191
-
192
- for (let j = 0; j < specifiers.length; j++) {
193
- const specifier = specifiers[j];
194
- addExportedEntry(
195
- exportedEntries,
196
- localNames,
197
- specifier.local.name,
198
- specifier.exported.name,
199
- null,
200
- specifier.local.loc
201
- );
202
- }
203
- }
204
-
205
- continue;
206
- }
207
- }
208
-
209
- let mappings =
210
- sourceMap && typeof sourceMap.mappings === "string"
211
- ? sourceMap.mappings
212
- : "";
213
- let newSrc = source;
214
-
215
- if (exportedEntries.length > 0) {
216
- let lastSourceIndex = 0;
217
- let lastOriginalLine = 0;
218
- let lastOriginalColumn = 0;
219
- let lastNameIndex = 0;
220
- let sourceLineCount = 0;
221
- let lastMappedLine = 0;
222
-
223
- if (sourceMap) {
224
- // We iterate source mapping entries and our matched exports in parallel to source map
225
- // them to their original location.
226
- let nextEntryIdx = 0;
227
- let nextEntryLine = exportedEntries[nextEntryIdx].loc.start.line;
228
- let nextEntryColumn = exportedEntries[nextEntryIdx].loc.start.column;
229
- readMappings(
230
- mappings,
231
- (
232
- generatedLine: number,
233
- generatedColumn: number,
234
- sourceIndex: number,
235
- originalLine: number,
236
- originalColumn: number,
237
- nameIndex: number
238
- ) => {
239
- if (
240
- generatedLine > nextEntryLine ||
241
- (generatedLine === nextEntryLine &&
242
- generatedColumn > nextEntryColumn)
243
- ) {
244
- // We're past the entry which means that the best match we have is the previous entry.
245
- if (lastMappedLine === nextEntryLine) {
246
- // Match
247
- exportedEntries[nextEntryIdx].originalLine = lastOriginalLine;
248
- exportedEntries[nextEntryIdx].originalColumn = lastOriginalColumn;
249
- exportedEntries[nextEntryIdx].originalSource = lastSourceIndex;
250
- exportedEntries[nextEntryIdx].nameIndex = lastNameIndex;
251
- }
252
-
253
- nextEntryIdx++;
254
-
255
- if (nextEntryIdx < exportedEntries.length) {
256
- nextEntryLine = exportedEntries[nextEntryIdx].loc.start.line;
257
- nextEntryColumn = exportedEntries[nextEntryIdx].loc.start.column;
258
- } else {
259
- nextEntryLine = -1;
260
- nextEntryColumn = -1;
261
- }
262
- }
263
-
264
- lastMappedLine = generatedLine;
265
-
266
- if (sourceIndex > -1) {
267
- lastSourceIndex = sourceIndex;
268
- }
269
-
270
- if (originalLine > -1) {
271
- lastOriginalLine = originalLine;
272
- }
273
-
274
- if (originalColumn > -1) {
275
- lastOriginalColumn = originalColumn;
276
- }
277
-
278
- if (nameIndex > -1) {
279
- lastNameIndex = nameIndex;
280
- }
281
- }
282
- );
283
-
284
- if (nextEntryIdx < exportedEntries.length) {
285
- if (lastMappedLine === nextEntryLine) {
286
- // Match
287
- exportedEntries[nextEntryIdx].originalLine = lastOriginalLine;
288
- exportedEntries[nextEntryIdx].originalColumn = lastOriginalColumn;
289
- exportedEntries[nextEntryIdx].originalSource = lastSourceIndex;
290
- exportedEntries[nextEntryIdx].nameIndex = lastNameIndex;
291
- }
292
- }
293
-
294
- for (
295
- let lastIdx = mappings.length - 1;
296
- lastIdx >= 0 && mappings[lastIdx] === ";";
297
- lastIdx--
298
- ) {
299
- // If the last mapped lines don't contain any segments, we don't get a callback from readMappings
300
- // so we need to pad the number of mapped lines, with one for each empty line.
301
- lastMappedLine++;
302
- }
303
-
304
- sourceLineCount = program.loc.end.line;
305
-
306
- if (sourceLineCount < lastMappedLine) {
307
- throw new Error(
308
- "The source map has more mappings than there are lines."
309
- );
310
- } // If the original source string had more lines than there are mappings in the source map.
311
- // Add some extra padding of unmapped lines so that any lines that we add line up.
312
-
313
- for (
314
- let extraLines = sourceLineCount - lastMappedLine;
315
- extraLines > 0;
316
- extraLines--
317
- ) {
318
- mappings += ";";
319
- }
320
- } else {
321
- // If a file doesn't have a source map then we generate a blank source map that just
322
- // contains the original content and segments pointing to the original lines.
323
- sourceLineCount = 1;
324
- let idx = -1;
325
-
326
- while ((idx = source.indexOf("\n", idx + 1)) !== -1) {
327
- sourceLineCount++;
328
- }
329
-
330
- mappings = "AAAA" + ";AACA".repeat(sourceLineCount - 1);
331
- sourceMap = new SourceMap({
332
- version: 3,
333
- file: basename(url),
334
- sources: [url],
335
- sourcesContent: [source],
336
- names: [],
337
- mappings: mappings,
338
- sourceRoot: "",
339
- });
340
- lastSourceIndex = 0;
341
- lastOriginalLine = sourceLineCount;
342
- lastOriginalColumn = 0;
343
- lastNameIndex = -1;
344
- lastMappedLine = sourceLineCount;
345
-
346
- for (let i = 0; i < exportedEntries.length; i++) {
347
- // Point each entry to original location.
348
- const entry = exportedEntries[i];
349
- entry.originalSource = 0;
350
- entry.originalLine = entry.loc.start.line; // We use column zero since we do the short-hand line-only source maps above.
351
-
352
- entry.originalColumn = 0; // entry.loc.start.column;
353
- }
354
- }
355
-
356
- newSrc = "";
357
- newSrc += `import ReactDOMServerESM from "react-server-dom-esm/server${
358
- isDev ? ".node" : ""
359
- }";\n`;
360
- // include stack trace where module is imported from
361
- newSrc += `if(ReactDOMServerESM instanceof Error){ throw ReactDOMServerESM; }`;
362
- newSrc += `export const registerServerReference = ReactDOMServerESM.registerServerReference;\n`;
363
-
364
- if (mappings) {
365
- mappings += ";;";
366
- }
367
-
368
- const createMapping = createMappingsSerializer(); // Create an empty mapping pointing to where we last left off to reset the counters.
369
-
370
- let generatedLine = 1;
371
- createMapping(
372
- generatedLine,
373
- 0,
374
- lastSourceIndex,
375
- lastOriginalLine,
376
- lastOriginalColumn,
377
- lastNameIndex
378
- );
379
-
380
- for (let i = 0; i < exportedEntries.length; i++) {
381
- const entry = exportedEntries[i];
382
- generatedLine++;
383
-
384
- if (entry.type !== "function") {
385
- // We first check if the export is a function and if so annotate it.
386
- newSrc += "if (typeof " + entry.localName + ' === "function") ';
387
- }
388
-
389
- newSrc += "registerServerReference(" + entry.localName + ",";
390
- newSrc += JSON.stringify(url) + ",";
391
- newSrc += JSON.stringify(entry.exportedName) + ");\n";
392
- mappings += createMapping(
393
- generatedLine,
394
- 0,
395
- entry.originalSource,
396
- entry.originalLine,
397
- entry.originalColumn,
398
- entry.nameIndex
399
- );
400
- }
401
- }
402
-
403
- if (sourceMap) {
404
- // Override with an new mappings and serialize an inline source map.
405
- sourceMap.mappings = mappings;
406
- newSrc +=
407
- "//# sourceMappingURL=data:application/json;charset=utf-8;base64," +
408
- Buffer.from(JSON.stringify(sourceMap)).toString("base64");
409
- }
410
- if (port) {
411
- port.postMessage({
412
- type: "SERVER_MODULE",
413
- url,
414
- source: newSrc,
415
- });
416
- }
417
-
418
- return newSrc;
419
- }
420
-
421
- function addExportNames(names: any, node: any) {
422
- switch (node.type) {
423
- case "Identifier":
424
- names.push(node.name);
425
- return;
426
-
427
- case "ObjectPattern":
428
- for (let i = 0; i < node.properties.length; i++)
429
- addExportNames(names, node.properties[i]);
430
-
431
- return;
432
-
433
- case "ArrayPattern":
434
- for (let i = 0; i < node.elements.length; i++) {
435
- const element = node.elements[i];
436
- if (element) addExportNames(names, element);
437
- }
438
-
439
- return;
440
-
441
- case "Property":
442
- addExportNames(names, node.value);
443
- return;
444
-
445
- case "AssignmentPattern":
446
- addExportNames(names, node.left);
447
- return;
448
-
449
- case "RestElement":
450
- addExportNames(names, node.argument);
451
- return;
452
-
453
- case "ParenthesizedExpression":
454
- addExportNames(names, node.expression);
455
- return;
456
- }
457
- }
458
-
459
- function resolveClientImport(specifier: string, parentURL: string) {
460
- const conditions = ["node", "import"];
461
-
462
- if (stashedResolve === null) {
463
- throw new Error(
464
- "Expected resolve to have been called before transformSource"
465
- );
466
- }
467
-
468
- return stashedResolve(
469
- specifier,
470
- {
471
- conditions,
472
- parentURL,
473
- },
474
- stashedResolve
475
- );
476
- }
477
-
478
- async function parseExportNamesInto(
479
- body: any,
480
- names: any,
481
- parentURL: string,
482
- loader: any
483
- ) {
484
- for (let i = 0; i < body.length; i++) {
485
- const node = body[i];
486
-
487
- switch (node.type) {
488
- case "ExportAllDeclaration":
489
- if (node.exported) {
490
- addExportNames(names, node.exported);
491
- continue;
492
- } else {
493
- const _await$resolveClientI = await resolveClientImport(
494
- node.source.value,
495
- parentURL
496
- ),
497
- url = _await$resolveClientI.url;
498
-
499
- const _await$loader = await loader(
500
- url,
501
- {
502
- format: "module",
503
- conditions: [],
504
- importAttributes: {},
505
- },
506
- loader
507
- ),
508
- source = _await$loader.source;
509
-
510
- if (typeof source !== "string") {
511
- throw new Error("Expected the transformed source to be a string.");
512
- }
513
-
514
- let childBody;
515
-
516
- try {
517
- childBody = acorn.parse(source, {
518
- ecmaVersion: "2024" as never,
519
- sourceType: "module",
520
- }).body;
521
- } catch (x) {
522
- // eslint-disable-next-line react-internal/no-production-logging
523
- console.error("Error parsing %s %s", url, (x as Error)?.message);
524
- continue;
525
- }
526
-
527
- await parseExportNamesInto(childBody, names, url, loader);
528
- continue;
529
- }
530
-
531
- case "ExportDefaultDeclaration":
532
- names.push("default");
533
- continue;
534
-
535
- case "ExportNamedDeclaration":
536
- if (node.declaration) {
537
- if (node.declaration.type === "VariableDeclaration") {
538
- const declarations = node.declaration.declarations;
539
-
540
- for (let j = 0; j < declarations.length; j++) {
541
- addExportNames(names, declarations[j].id);
542
- }
543
- } else {
544
- addExportNames(names, node.declaration.id);
545
- }
546
- }
547
-
548
- if (node.specifiers) {
549
- const specifiers = node.specifiers;
550
-
551
- for (let j = 0; j < specifiers.length; j++) {
552
- addExportNames(names, specifiers[j].exported);
553
- }
554
- }
555
-
556
- continue;
557
- }
558
- }
559
- }
560
-
561
- async function transformClientModule(
562
- program: any,
563
- url: string,
564
- sourceMap: any,
565
- loader: any
566
- ) {
567
- const body = program.body;
568
- const names: any[] = [];
569
- await parseExportNamesInto(body, names, url, loader);
570
-
571
- if (names.length === 0) {
572
- return null;
573
- }
574
-
575
- let newSrc = `import ReactDOMServerESM from "react-server-dom-esm/server${
576
- isDev ? ".node" : ""
577
- }";\n`;
578
- // check if the module is poisoned
579
- newSrc += `if(ReactDOMServerESM instanceof Error){ throw new Error(ReactDOMServerESM); }`;
580
- newSrc += `export const registerClientReference = ReactDOMServerESM.registerClientReference;\n`;
581
-
582
- for (let i = 0; i < names.length; i++) {
583
- const name = names[i];
584
-
585
- const errorMessage =
586
- name === "default"
587
- ? `Attempted to call the default export of ${url} from the server but it's on the client`
588
- : `Attempted to call ${name}() from the server but ${name} is on the client`;
589
-
590
- const fullError = `${errorMessage}. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.`;
591
-
592
- // Convert file:// URL to relative path for the browser
593
- const browserUrl = url.replace("file://", "").replace(process.cwd(), "");
594
-
595
- if (name === "default") {
596
- newSrc += `export default registerClientReference(function() { throw new Error(${JSON.stringify(
597
- fullError
598
- )}); }, ${JSON.stringify(browserUrl)}, ${JSON.stringify(name)});\n`;
599
- } else {
600
- newSrc += `export const ${name} = registerClientReference(function() { throw new Error(${JSON.stringify(
601
- fullError
602
- )}); }, ${JSON.stringify(browserUrl)}, ${JSON.stringify(name)});\n`;
603
- }
604
- }
605
-
606
- // Create source map
607
- if (sourceMap) {
608
- const newSourceMap = {
609
- version: 3,
610
- file: basename(url),
611
- sources: [url],
612
- sourcesContent: [program.source],
613
- names: [],
614
- mappings: "AAAA;" + ";".repeat(names.length), // Simple line mapping
615
- sourceRoot: "",
616
- };
617
-
618
- newSrc +=
619
- "\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,";
620
- newSrc += Buffer.from(JSON.stringify(newSourceMap)).toString("base64");
621
- }
622
-
623
- return newSrc;
624
- }
625
-
626
- async function loadClientImport(url: string, defaultTransformSource: any) {
627
- if (stashedGetSource === null) {
628
- throw new Error(
629
- "Expected getSource to have been called before transformSource"
630
- );
631
- } // TODO: Validate that this is another module by calling getFormat.
632
-
633
- const _await$stashedGetSour = await stashedGetSource(
634
- url,
635
- {
636
- format: "module",
637
- },
638
- stashedGetSource
639
- ),
640
- source = _await$stashedGetSour.source;
641
-
642
- const result = await defaultTransformSource(
643
- source,
644
- {
645
- format: "module",
646
- url,
647
- },
648
- defaultTransformSource
649
- );
650
- return {
651
- format: "module",
652
- source: result.source,
653
- };
654
- }
655
-
656
- export async function transformModuleIfNeeded(
657
- source: string,
658
- url: string,
659
- loader: any,
660
- port?: MessagePort // Make port parameter optional
661
- ) {
662
- if (
663
- source.indexOf("use client") === -1 &&
664
- source.indexOf("use server") === -1
665
- ) {
666
- return source;
667
- }
668
-
669
- let program;
670
- try {
671
- program = acorn.parse(source, {
672
- ecmaVersion: "2024" as never,
673
- sourceType: "module",
674
- locations: true,
675
- });
676
- } catch (x) {
677
- console.error(
678
- "[react-loader] Error parsing %s: %s",
679
- url,
680
- (x as Error)?.message
681
- );
682
- return source;
683
- }
684
-
685
- let useClient = false;
686
- let useServer = false; // Keep this for server transforms
687
-
688
- // Check for directives
689
- for (const node of program.body) {
690
- if (node.type !== "ExpressionStatement" || !node.directive) continue;
691
-
692
- if (node.directive === "use client") {
693
- useClient = true;
694
-
695
- break;
696
- }
697
- if (node.directive === "use server") {
698
- useServer = true;
699
- break;
700
- }
701
- }
702
- if (useClient && useServer) {
703
- throw new Error(
704
- "Cannot use both use client and use server directives in the same module"
705
- );
706
- }
707
- if (!useClient && !useServer) {
708
- return source;
709
- }
710
-
711
- if (useClient) {
712
- return transformClientModule(program, url, undefined, loader);
713
- }
714
- return transformServerModule(source, program, url, undefined, loader, port);
715
- }
716
-
717
- function readMappings(
718
- mappings: string,
719
- callback: (
720
- generatedLine: number,
721
- generatedColumn: number,
722
- sourceIndex: number,
723
- originalLine: number,
724
- originalColumn: number,
725
- nameIndex: number
726
- ) => void
727
- ) {
728
- let line = 1;
729
- let column = 0;
730
- let sourceIndex = 0;
731
- let originalLine = 0;
732
- let originalColumn = 0;
733
- let nameIndex = 0;
734
-
735
- let index = 0;
736
- while (index < mappings.length) {
737
- if (mappings[index] === ";") {
738
- line++;
739
- column = 0;
740
- index++;
741
- continue;
742
- }
743
- if (mappings[index] === ",") {
744
- index++;
745
- continue;
746
- }
747
-
748
- let [
749
- generatedColumnDelta = 0,
750
- sourceIndexDelta = 0,
751
- originalLineDelta = 0,
752
- originalColumnDelta = 0,
753
- nameIndexDelta = 0,
754
- ] = decodeVLQ(mappings.slice(index));
755
-
756
- // Update positions
757
- column += generatedColumnDelta;
758
- sourceIndex += sourceIndexDelta;
759
- originalLine += originalLineDelta;
760
- originalColumn += originalColumnDelta;
761
- nameIndex += nameIndexDelta;
762
-
763
- // Skip the encoded segment
764
- while (index < mappings.length && !/[,;]/.test(mappings[index])) {
765
- index++;
766
- }
767
-
768
- callback(
769
- line,
770
- column,
771
- sourceIndex,
772
- originalLine,
773
- originalColumn,
774
- nameIndex
775
- );
776
- }
777
- }
778
-
779
- function createMappingsSerializer() {
780
- let previousGeneratedLine = 1;
781
- let previousGeneratedColumn = 0;
782
- let previousOriginalFile = 0;
783
- let previousOriginalLine = 0;
784
- let previousOriginalColumn = 0;
785
- let previousNameIndex = 0;
786
-
787
- return function (
788
- generatedLine: number,
789
- generatedColumn: number,
790
- originalFile: number,
791
- originalLine: number,
792
- originalColumn: number,
793
- nameIndex: number
794
- ): string {
795
- // Reset column when moving to a new line
796
- if (generatedLine > previousGeneratedLine) {
797
- previousGeneratedColumn = 0;
798
- let lines = "";
799
- for (let i = previousGeneratedLine; i < generatedLine; i++) {
800
- lines += ";";
801
- }
802
- previousGeneratedLine = generatedLine;
803
- if (lines) return lines;
804
- }
805
-
806
- // Calculate deltas
807
- const segment = [
808
- generatedColumn - previousGeneratedColumn,
809
- originalFile - previousOriginalFile,
810
- originalLine - previousOriginalLine,
811
- originalColumn - previousOriginalColumn,
812
- ];
813
-
814
- if (nameIndex >= 0) {
815
- segment.push(nameIndex - previousNameIndex);
816
- }
817
-
818
- // Update previous values
819
- previousGeneratedColumn = generatedColumn;
820
- previousOriginalFile = originalFile;
821
- previousOriginalLine = originalLine;
822
- previousOriginalColumn = originalColumn;
823
- previousNameIndex = nameIndex;
824
-
825
- return encodeVLQ(segment) + ",";
826
- };
827
- }
828
-
829
- // VLQ encoding helpers
830
- const VLQ_SHIFT = 5;
831
- const VLQ_CONTINUATION_BIT = 1 << VLQ_SHIFT;
832
- const VLQ_VALUE_MASK = VLQ_CONTINUATION_BIT - 1;
833
- const BASE64_CHARS =
834
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
835
-
836
- function encodeVLQ(numbers: number[]): string {
837
- return numbers
838
- .map((num) => {
839
- // Convert to VLQ
840
- const vlq = num < 0 ? (-num << 1) | 1 : num << 1;
841
-
842
- let result = "";
843
- let value = vlq;
844
-
845
- do {
846
- let digit = value & VLQ_VALUE_MASK;
847
- value >>>= VLQ_SHIFT;
848
- if (value > 0) {
849
- digit |= VLQ_CONTINUATION_BIT;
850
- }
851
- result += BASE64_CHARS[digit];
852
- } while (value > 0);
853
-
854
- return result;
855
- })
856
- .join("");
857
- }
858
-
859
- function decodeVLQ(str: string): number[] {
860
- const numbers: number[] = [];
861
- let value = 0;
862
- let shift = 0;
863
- let index = 0;
864
-
865
- while (index < str.length && !/[,;]/.test(str[index])) {
866
- const digit = BASE64_CHARS.indexOf(str[index]);
867
- if (digit === -1) break;
868
-
869
- value += (digit & VLQ_VALUE_MASK) << shift;
870
-
871
- if ((digit & VLQ_CONTINUATION_BIT) === 0) {
872
- const negate = value & 1;
873
- value >>>= 1;
874
- numbers.push(negate ? -value : value);
875
- value = shift = 0;
876
- } else {
877
- shift += VLQ_SHIFT;
878
- }
879
-
880
- index++;
881
- }
882
-
883
- return numbers;
884
- }
885
-
886
- // Initialize hook
887
- export async function initialize(data: { port: MessagePort }) {
888
- loaderPort = data.port; // Store port
889
- data.port.postMessage({ type: "INITIALIZED_REACT_LOADER" });
890
- data.port.unref();
891
- }
892
-
893
- // Resolve hook
894
- export async function resolve(
895
- specifier: string,
896
- context: ResolveHookContext,
897
- nextResolve: any
898
- ) {
899
- return nextResolve(specifier, context);
900
- }
901
-
902
- // Load hook
903
- export async function load(
904
- url: string,
905
- context: LoadHookContext & LoaderContext,
906
- nextLoad: any
907
- ) {
908
- const result = await nextLoad(url, {
909
- ...context,
910
- env: env,
911
- });
912
-
913
- // If not a module, return as is
914
- if (result.format !== "module") {
915
- return result;
916
- }
917
-
918
- // Convert source to string if it's a Buffer or Uint8Array
919
- let sourceStr: string;
920
- if (typeof result.source === "string") {
921
- sourceStr = result.source;
922
- } else if (
923
- result.source instanceof Uint8Array ||
924
- Buffer.isBuffer(result.source)
925
- ) {
926
- sourceStr = result.source.toString("utf-8");
927
- } else {
928
- console.warn(
929
- `[react-loader] Unexpected source type: ${typeof result.source}`
930
- );
931
- return result;
932
- }
933
-
934
- // Transform the module if needed
935
- const transformResult = await transformModuleIfNeeded(
936
- sourceStr,
937
- url,
938
- nextLoad,
939
- loaderPort ?? undefined
940
- );
941
-
942
- // Handle different return types from transformModuleIfNeeded
943
- if (transformResult === null) {
944
- return result;
945
- } else if (typeof transformResult === "string") {
946
- return { ...result, source: transformResult };
947
- } else if (typeof transformResult === "object") {
948
- // Type assertion for object with code and map properties
949
- const typedResult = transformResult as { code: string; map?: any };
950
- if (!("code" in typedResult)) {
951
- throw new Error("Failed to transform module");
952
- }
953
- return {
954
- ...result,
955
- source: typedResult.code,
956
- map: typedResult.map || result.map,
957
- };
958
- } else {
959
- console.warn(
960
- `[react-loader] Unexpected transform result type: ${typeof transformResult}`
961
- );
962
- return result;
963
- }
964
- }
965
-
966
- // Transform hook
967
- export async function transformSource(
968
- source: string,
969
- context: any,
970
- defaultTransformSource: any
971
- ) {
972
- const transformed = await defaultTransformSource(
973
- source,
974
- context,
975
- defaultTransformSource
976
- );
977
- if (context.format === "module") {
978
- // Convert transformedSource to string if it's a Buffer or Uint8Array
979
- let transformedSourceStr: string;
980
- if (typeof transformed.source === "string") {
981
- transformedSourceStr = transformed.source;
982
- } else if (
983
- transformed.source instanceof Uint8Array ||
984
- Buffer.isBuffer(transformed.source)
985
- ) {
986
- transformedSourceStr = transformed.source.toString("utf-8");
987
- } else {
988
- console.warn(
989
- `[react-loader] Unexpected transformed source type: ${typeof transformed.source}`
990
- );
991
- return transformed;
992
- }
993
-
994
- const newSrc = await transformModuleIfNeeded(
995
- transformedSourceStr,
996
- context.url,
997
- (url: string) => loadClientImport(url, defaultTransformSource),
998
- context.data?.port!
999
- );
1000
- return { source: newSrc };
1001
- }
1002
-
1003
- return transformed;
1004
- }
6
+ export const { load, resolve, transformModuleIfNeeded } = loader;