vxrn 1.25.3 → 1.25.5

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 (446) hide show
  1. package/package.json +11 -11
  2. package/src/plugins/reactNativeDevServer.ts +57 -17
  3. package/src/utils/createNativeDevEngine.test.ts +95 -0
  4. package/src/utils/createNativeDevEngine.ts +157 -80
  5. package/types/utils/createNativeDevEngine.d.ts +17 -6
  6. package/dist/cli.mjs +0 -288
  7. package/dist/cli.mjs.map +0 -1
  8. package/dist/cli.native.js +0 -292
  9. package/dist/cli.native.js.map +0 -1
  10. package/dist/config/getAdditionalViteConfig.mjs +0 -67
  11. package/dist/config/getAdditionalViteConfig.mjs.map +0 -1
  12. package/dist/config/getAdditionalViteConfig.native.js +0 -67
  13. package/dist/config/getAdditionalViteConfig.native.js.map +0 -1
  14. package/dist/config/getBaseViteConfigOnly.mjs +0 -84
  15. package/dist/config/getBaseViteConfigOnly.mjs.map +0 -1
  16. package/dist/config/getBaseViteConfigOnly.native.js +0 -86
  17. package/dist/config/getBaseViteConfigOnly.native.js.map +0 -1
  18. package/dist/config/getBaseViteConfigWithPlugins.mjs +0 -10
  19. package/dist/config/getBaseViteConfigWithPlugins.mjs.map +0 -1
  20. package/dist/config/getBaseViteConfigWithPlugins.native.js +0 -10
  21. package/dist/config/getBaseViteConfigWithPlugins.native.js.map +0 -1
  22. package/dist/config/getBaseVitePlugins.mjs +0 -141
  23. package/dist/config/getBaseVitePlugins.mjs.map +0 -1
  24. package/dist/config/getBaseVitePlugins.native.js +0 -163
  25. package/dist/config/getBaseVitePlugins.native.js.map +0 -1
  26. package/dist/config/getNonCliModeOnlyVitePlugins.mjs +0 -8
  27. package/dist/config/getNonCliModeOnlyVitePlugins.mjs.map +0 -1
  28. package/dist/config/getNonCliModeOnlyVitePlugins.native.js +0 -6
  29. package/dist/config/getNonCliModeOnlyVitePlugins.native.js.map +0 -1
  30. package/dist/config/getOptimizeDeps.mjs +0 -47
  31. package/dist/config/getOptimizeDeps.mjs.map +0 -1
  32. package/dist/config/getOptimizeDeps.native.js +0 -47
  33. package/dist/config/getOptimizeDeps.native.js.map +0 -1
  34. package/dist/config/getOptimizeDeps.test.mjs +0 -20
  35. package/dist/config/getOptimizeDeps.test.mjs.map +0 -1
  36. package/dist/config/getOptimizeDeps.test.native.js +0 -39
  37. package/dist/config/getOptimizeDeps.test.native.js.map +0 -1
  38. package/dist/config/getOptionsFilled.mjs +0 -69
  39. package/dist/config/getOptionsFilled.mjs.map +0 -1
  40. package/dist/config/getOptionsFilled.native.js +0 -73
  41. package/dist/config/getOptionsFilled.native.js.map +0 -1
  42. package/dist/config/getReactNativePlugins.mjs +0 -23
  43. package/dist/config/getReactNativePlugins.mjs.map +0 -1
  44. package/dist/config/getReactNativePlugins.native.js +0 -25
  45. package/dist/config/getReactNativePlugins.native.js.map +0 -1
  46. package/dist/config/getServerOptionsFilled.mjs +0 -40
  47. package/dist/config/getServerOptionsFilled.mjs.map +0 -1
  48. package/dist/config/getServerOptionsFilled.native.js +0 -43
  49. package/dist/config/getServerOptionsFilled.native.js.map +0 -1
  50. package/dist/config/getServerOptionsFilled.test.mjs +0 -20
  51. package/dist/config/getServerOptionsFilled.test.mjs.map +0 -1
  52. package/dist/config/getServerOptionsFilled.test.native.js +0 -20
  53. package/dist/config/getServerOptionsFilled.test.native.js.map +0 -1
  54. package/dist/config/getViteServerConfig.mjs +0 -51
  55. package/dist/config/getViteServerConfig.mjs.map +0 -1
  56. package/dist/config/getViteServerConfig.native.js +0 -52
  57. package/dist/config/getViteServerConfig.native.js.map +0 -1
  58. package/dist/config/mergeUserConfig.mjs +0 -37
  59. package/dist/config/mergeUserConfig.mjs.map +0 -1
  60. package/dist/config/mergeUserConfig.native.js +0 -47
  61. package/dist/config/mergeUserConfig.native.js.map +0 -1
  62. package/dist/config/mergeUserConfig.test.mjs +0 -108
  63. package/dist/config/mergeUserConfig.test.mjs.map +0 -1
  64. package/dist/config/mergeUserConfig.test.native.js +0 -108
  65. package/dist/config/mergeUserConfig.test.native.js.map +0 -1
  66. package/dist/constants/defaults.mjs +0 -15
  67. package/dist/constants/defaults.mjs.map +0 -1
  68. package/dist/constants/defaults.native.js +0 -15
  69. package/dist/constants/defaults.native.js.map +0 -1
  70. package/dist/constants.mjs +0 -10
  71. package/dist/constants.mjs.map +0 -1
  72. package/dist/constants.native.js +0 -10
  73. package/dist/constants.native.js.map +0 -1
  74. package/dist/exports/build.mjs +0 -294
  75. package/dist/exports/build.mjs.map +0 -1
  76. package/dist/exports/build.native.js +0 -307
  77. package/dist/exports/build.native.js.map +0 -1
  78. package/dist/exports/clean.mjs +0 -99
  79. package/dist/exports/clean.mjs.map +0 -1
  80. package/dist/exports/clean.native.js +0 -111
  81. package/dist/exports/clean.native.js.map +0 -1
  82. package/dist/exports/clean.test.mjs +0 -81
  83. package/dist/exports/clean.test.mjs.map +0 -1
  84. package/dist/exports/clean.test.native.js +0 -88
  85. package/dist/exports/clean.test.native.js.map +0 -1
  86. package/dist/exports/createServer.mjs +0 -56
  87. package/dist/exports/createServer.mjs.map +0 -1
  88. package/dist/exports/createServer.native.js +0 -57
  89. package/dist/exports/createServer.native.js.map +0 -1
  90. package/dist/exports/dev.mjs +0 -204
  91. package/dist/exports/dev.mjs.map +0 -1
  92. package/dist/exports/dev.native.js +0 -218
  93. package/dist/exports/dev.native.js.map +0 -1
  94. package/dist/exports/loadEnv.mjs +0 -65
  95. package/dist/exports/loadEnv.mjs.map +0 -1
  96. package/dist/exports/loadEnv.native.js +0 -74
  97. package/dist/exports/loadEnv.native.js.map +0 -1
  98. package/dist/exports/loadEnv.test.mjs +0 -65
  99. package/dist/exports/loadEnv.test.mjs.map +0 -1
  100. package/dist/exports/loadEnv.test.native.js +0 -65
  101. package/dist/exports/loadEnv.test.native.js.map +0 -1
  102. package/dist/exports/patch.mjs +0 -12
  103. package/dist/exports/patch.mjs.map +0 -1
  104. package/dist/exports/patch.native.js +0 -12
  105. package/dist/exports/patch.native.js.map +0 -1
  106. package/dist/exports/prebuild.mjs +0 -212
  107. package/dist/exports/prebuild.mjs.map +0 -1
  108. package/dist/exports/prebuild.native.js +0 -215
  109. package/dist/exports/prebuild.native.js.map +0 -1
  110. package/dist/exports/prebuildWithoutExpo.mjs +0 -53
  111. package/dist/exports/prebuildWithoutExpo.mjs.map +0 -1
  112. package/dist/exports/prebuildWithoutExpo.native.js +0 -54
  113. package/dist/exports/prebuildWithoutExpo.native.js.map +0 -1
  114. package/dist/exports/runAndroid.mjs +0 -14
  115. package/dist/exports/runAndroid.mjs.map +0 -1
  116. package/dist/exports/runAndroid.native.js +0 -15
  117. package/dist/exports/runAndroid.native.js.map +0 -1
  118. package/dist/exports/runIos.mjs +0 -14
  119. package/dist/exports/runIos.mjs.map +0 -1
  120. package/dist/exports/runIos.native.js +0 -15
  121. package/dist/exports/runIos.native.js.map +0 -1
  122. package/dist/exports/serve.mjs +0 -37
  123. package/dist/exports/serve.mjs.map +0 -1
  124. package/dist/exports/serve.native.js +0 -40
  125. package/dist/exports/serve.native.js.map +0 -1
  126. package/dist/exports/serveStaticAssets.mjs +0 -133
  127. package/dist/exports/serveStaticAssets.mjs.map +0 -1
  128. package/dist/exports/serveStaticAssets.native.js +0 -213
  129. package/dist/exports/serveStaticAssets.native.js.map +0 -1
  130. package/dist/index.js +0 -22
  131. package/dist/index.js.map +0 -1
  132. package/dist/index.mjs +0 -22
  133. package/dist/index.mjs.map +0 -1
  134. package/dist/index.native.js +0 -22
  135. package/dist/index.native.js.map +0 -1
  136. package/dist/patches/builtInDepPatches.mjs +0 -483
  137. package/dist/patches/builtInDepPatches.mjs.map +0 -1
  138. package/dist/patches/builtInDepPatches.native.js +0 -486
  139. package/dist/patches/builtInDepPatches.native.js.map +0 -1
  140. package/dist/plugins/applyBuiltInPatchesPlugin.mjs +0 -17
  141. package/dist/plugins/applyBuiltInPatchesPlugin.mjs.map +0 -1
  142. package/dist/plugins/applyBuiltInPatchesPlugin.native.js +0 -17
  143. package/dist/plugins/applyBuiltInPatchesPlugin.native.js.map +0 -1
  144. package/dist/plugins/autoDepOptimizePlugin.mjs +0 -108
  145. package/dist/plugins/autoDepOptimizePlugin.mjs.map +0 -1
  146. package/dist/plugins/autoDepOptimizePlugin.native.js +0 -121
  147. package/dist/plugins/autoDepOptimizePlugin.native.js.map +0 -1
  148. package/dist/plugins/autoDepOptimizePlugin.test.mjs +0 -31
  149. package/dist/plugins/autoDepOptimizePlugin.test.mjs.map +0 -1
  150. package/dist/plugins/autoDepOptimizePlugin.test.native.js +0 -39
  151. package/dist/plugins/autoDepOptimizePlugin.test.native.js.map +0 -1
  152. package/dist/plugins/clientInjectPlugin.mjs +0 -16
  153. package/dist/plugins/clientInjectPlugin.mjs.map +0 -1
  154. package/dist/plugins/clientInjectPlugin.native.js +0 -16
  155. package/dist/plugins/clientInjectPlugin.native.js.map +0 -1
  156. package/dist/plugins/defaultDepOptimizePlugin.mjs +0 -30
  157. package/dist/plugins/defaultDepOptimizePlugin.mjs.map +0 -1
  158. package/dist/plugins/defaultDepOptimizePlugin.native.js +0 -30
  159. package/dist/plugins/defaultDepOptimizePlugin.native.js.map +0 -1
  160. package/dist/plugins/expoManifestRequestHandlerPlugin.mjs +0 -189
  161. package/dist/plugins/expoManifestRequestHandlerPlugin.mjs.map +0 -1
  162. package/dist/plugins/expoManifestRequestHandlerPlugin.native.js +0 -202
  163. package/dist/plugins/expoManifestRequestHandlerPlugin.native.js.map +0 -1
  164. package/dist/plugins/getResolvedConfigSubset.mjs +0 -12
  165. package/dist/plugins/getResolvedConfigSubset.mjs.map +0 -1
  166. package/dist/plugins/getResolvedConfigSubset.native.js +0 -12
  167. package/dist/plugins/getResolvedConfigSubset.native.js.map +0 -1
  168. package/dist/plugins/reactNativeCommonJsPlugin.mjs +0 -194
  169. package/dist/plugins/reactNativeCommonJsPlugin.mjs.map +0 -1
  170. package/dist/plugins/reactNativeCommonJsPlugin.native.js +0 -275
  171. package/dist/plugins/reactNativeCommonJsPlugin.native.js.map +0 -1
  172. package/dist/plugins/reactNativeDevAssetPlugin.mjs +0 -99
  173. package/dist/plugins/reactNativeDevAssetPlugin.mjs.map +0 -1
  174. package/dist/plugins/reactNativeDevAssetPlugin.native.js +0 -108
  175. package/dist/plugins/reactNativeDevAssetPlugin.native.js.map +0 -1
  176. package/dist/plugins/reactNativeDevServer.mjs +0 -190
  177. package/dist/plugins/reactNativeDevServer.mjs.map +0 -1
  178. package/dist/plugins/reactNativeDevServer.native.js +0 -232
  179. package/dist/plugins/reactNativeDevServer.native.js.map +0 -1
  180. package/dist/plugins/resolveIdScan.test.mjs +0 -31
  181. package/dist/plugins/resolveIdScan.test.mjs.map +0 -1
  182. package/dist/plugins/resolveIdScan.test.native.js +0 -38
  183. package/dist/plugins/resolveIdScan.test.native.js.map +0 -1
  184. package/dist/plugins/rollupRemoveUnusedImports.mjs +0 -11
  185. package/dist/plugins/rollupRemoveUnusedImports.mjs.map +0 -1
  186. package/dist/plugins/rollupRemoveUnusedImports.native.js +0 -11
  187. package/dist/plugins/rollupRemoveUnusedImports.native.js.map +0 -1
  188. package/dist/plugins/serverExtensions.test.mjs +0 -106
  189. package/dist/plugins/serverExtensions.test.mjs.map +0 -1
  190. package/dist/plugins/serverExtensions.test.native.js +0 -117
  191. package/dist/plugins/serverExtensions.test.native.js.map +0 -1
  192. package/dist/rn-commands/bundle/buildBundle.mjs +0 -68
  193. package/dist/rn-commands/bundle/buildBundle.mjs.map +0 -1
  194. package/dist/rn-commands/bundle/buildBundle.native.js +0 -75
  195. package/dist/rn-commands/bundle/buildBundle.native.js.map +0 -1
  196. package/dist/runtime/hmr-client.mjs +0 -145
  197. package/dist/runtime/hmr-client.mjs.map +0 -1
  198. package/dist/runtime/hmr-client.native.js +0 -237
  199. package/dist/runtime/hmr-client.native.js.map +0 -1
  200. package/dist/runtime/hmr-runtime.mjs +0 -200
  201. package/dist/runtime/hmr-runtime.mjs.map +0 -1
  202. package/dist/runtime/hmr-runtime.native.js +0 -441
  203. package/dist/runtime/hmr-runtime.native.js.map +0 -1
  204. package/dist/runtime/hmr-types.mjs +0 -2
  205. package/dist/runtime/hmr-types.mjs.map +0 -1
  206. package/dist/runtime/hmr-types.native.js +0 -2
  207. package/dist/runtime/hmr-types.native.js.map +0 -1
  208. package/dist/runtime/native-prelude.mjs +0 -94
  209. package/dist/runtime/native-prelude.mjs.map +0 -1
  210. package/dist/runtime/native-prelude.native.js +0 -94
  211. package/dist/runtime/native-prelude.native.js.map +0 -1
  212. package/dist/runtime/react-refresh-utils.mjs +0 -29
  213. package/dist/runtime/react-refresh-utils.mjs.map +0 -1
  214. package/dist/runtime/react-refresh-utils.native.js +0 -34
  215. package/dist/runtime/react-refresh-utils.native.js.map +0 -1
  216. package/dist/serve/node.mjs +0 -62
  217. package/dist/serve/node.mjs.map +0 -1
  218. package/dist/serve/node.native.js +0 -107
  219. package/dist/serve/node.native.js.map +0 -1
  220. package/dist/serve/node.test.mjs +0 -60
  221. package/dist/serve/node.test.mjs.map +0 -1
  222. package/dist/serve/node.test.native.js +0 -72
  223. package/dist/serve/node.test.native.js.map +0 -1
  224. package/dist/types.mjs +0 -2
  225. package/dist/types.mjs.map +0 -1
  226. package/dist/types.native.js +0 -2
  227. package/dist/types.native.js.map +0 -1
  228. package/dist/user-interface/index.mjs +0 -312
  229. package/dist/user-interface/index.mjs.map +0 -1
  230. package/dist/user-interface/index.native.js +0 -349
  231. package/dist/user-interface/index.native.js.map +0 -1
  232. package/dist/utils/assert.mjs +0 -12
  233. package/dist/utils/assert.mjs.map +0 -1
  234. package/dist/utils/assert.native.js +0 -24
  235. package/dist/utils/assert.native.js.map +0 -1
  236. package/dist/utils/bindKeypressInput.mjs +0 -47
  237. package/dist/utils/bindKeypressInput.mjs.map +0 -1
  238. package/dist/utils/bindKeypressInput.native.js +0 -47
  239. package/dist/utils/bindKeypressInput.native.js.map +0 -1
  240. package/dist/utils/bindKeypressInput.test.mjs +0 -48
  241. package/dist/utils/bindKeypressInput.test.mjs.map +0 -1
  242. package/dist/utils/bindKeypressInput.test.native.js +0 -48
  243. package/dist/utils/bindKeypressInput.test.native.js.map +0 -1
  244. package/dist/utils/coerceToArray.mjs +0 -5
  245. package/dist/utils/coerceToArray.mjs.map +0 -1
  246. package/dist/utils/coerceToArray.native.js +0 -5
  247. package/dist/utils/coerceToArray.native.js.map +0 -1
  248. package/dist/utils/connectedNativeClients.mjs +0 -9
  249. package/dist/utils/connectedNativeClients.mjs.map +0 -1
  250. package/dist/utils/connectedNativeClients.native.js +0 -9
  251. package/dist/utils/connectedNativeClients.native.js.map +0 -1
  252. package/dist/utils/createNativeDevEngine.mjs +0 -875
  253. package/dist/utils/createNativeDevEngine.mjs.map +0 -1
  254. package/dist/utils/createNativeDevEngine.native.js +0 -932
  255. package/dist/utils/createNativeDevEngine.native.js.map +0 -1
  256. package/dist/utils/createNativeDevEngine.test.mjs +0 -93
  257. package/dist/utils/createNativeDevEngine.test.mjs.map +0 -1
  258. package/dist/utils/createNativeDevEngine.test.native.js +0 -106
  259. package/dist/utils/createNativeDevEngine.test.native.js.map +0 -1
  260. package/dist/utils/dispose.mjs +0 -9
  261. package/dist/utils/dispose.mjs.map +0 -1
  262. package/dist/utils/dispose.native.js +0 -11
  263. package/dist/utils/dispose.native.js.map +0 -1
  264. package/dist/utils/environmentUtils.mjs +0 -14
  265. package/dist/utils/environmentUtils.mjs.map +0 -1
  266. package/dist/utils/environmentUtils.native.js +0 -14
  267. package/dist/utils/environmentUtils.native.js.map +0 -1
  268. package/dist/utils/execSync.mjs +0 -9
  269. package/dist/utils/execSync.mjs.map +0 -1
  270. package/dist/utils/execSync.native.js +0 -9
  271. package/dist/utils/execSync.native.js.map +0 -1
  272. package/dist/utils/expoRun.mjs +0 -48
  273. package/dist/utils/expoRun.mjs.map +0 -1
  274. package/dist/utils/expoRun.native.js +0 -49
  275. package/dist/utils/expoRun.native.js.map +0 -1
  276. package/dist/utils/filterViteServerResolvedUrls.mjs +0 -29
  277. package/dist/utils/filterViteServerResolvedUrls.mjs.map +0 -1
  278. package/dist/utils/filterViteServerResolvedUrls.native.js +0 -70
  279. package/dist/utils/filterViteServerResolvedUrls.native.js.map +0 -1
  280. package/dist/utils/getBoundPort.mjs +0 -9
  281. package/dist/utils/getBoundPort.mjs.map +0 -1
  282. package/dist/utils/getBoundPort.native.js +0 -16
  283. package/dist/utils/getBoundPort.native.js.map +0 -1
  284. package/dist/utils/getBoundPort.test.mjs +0 -71
  285. package/dist/utils/getBoundPort.test.mjs.map +0 -1
  286. package/dist/utils/getBoundPort.test.native.js +0 -82
  287. package/dist/utils/getBoundPort.test.native.js.map +0 -1
  288. package/dist/utils/getCacheDir.mjs +0 -6
  289. package/dist/utils/getCacheDir.mjs.map +0 -1
  290. package/dist/utils/getCacheDir.native.js +0 -6
  291. package/dist/utils/getCacheDir.native.js.map +0 -1
  292. package/dist/utils/getServerEntry.mjs +0 -10
  293. package/dist/utils/getServerEntry.mjs.map +0 -1
  294. package/dist/utils/getServerEntry.native.js +0 -17
  295. package/dist/utils/getServerEntry.native.js.map +0 -1
  296. package/dist/utils/getVitePath.mjs +0 -49
  297. package/dist/utils/getVitePath.mjs.map +0 -1
  298. package/dist/utils/getVitePath.native.js +0 -48
  299. package/dist/utils/getVitePath.native.js.map +0 -1
  300. package/dist/utils/globDir.mjs +0 -18
  301. package/dist/utils/globDir.mjs.map +0 -1
  302. package/dist/utils/globDir.native.js +0 -21
  303. package/dist/utils/globDir.native.js.map +0 -1
  304. package/dist/utils/imageSizePatch.test.mjs +0 -29
  305. package/dist/utils/imageSizePatch.test.mjs.map +0 -1
  306. package/dist/utils/imageSizePatch.test.native.js +0 -30
  307. package/dist/utils/imageSizePatch.test.native.js.map +0 -1
  308. package/dist/utils/isWithin.mjs +0 -7
  309. package/dist/utils/isWithin.mjs.map +0 -1
  310. package/dist/utils/isWithin.native.js +0 -7
  311. package/dist/utils/isWithin.native.js.map +0 -1
  312. package/dist/utils/patches.mjs +0 -279
  313. package/dist/utils/patches.mjs.map +0 -1
  314. package/dist/utils/patches.native.js +0 -508
  315. package/dist/utils/patches.native.js.map +0 -1
  316. package/dist/utils/patches.test.mjs +0 -214
  317. package/dist/utils/patches.test.mjs.map +0 -1
  318. package/dist/utils/patches.test.native.js +0 -224
  319. package/dist/utils/patches.test.native.js.map +0 -1
  320. package/dist/utils/printServerUrls.mjs +0 -12
  321. package/dist/utils/printServerUrls.mjs.map +0 -1
  322. package/dist/utils/printServerUrls.native.js +0 -56
  323. package/dist/utils/printServerUrls.native.js.map +0 -1
  324. package/dist/utils/removeUndefined.mjs +0 -11
  325. package/dist/utils/removeUndefined.mjs.map +0 -1
  326. package/dist/utils/removeUndefined.native.js +0 -11
  327. package/dist/utils/removeUndefined.native.js.map +0 -1
  328. package/dist/utils/scanDepsToOptimize.mjs +0 -176
  329. package/dist/utils/scanDepsToOptimize.mjs.map +0 -1
  330. package/dist/utils/scanDepsToOptimize.native.js +0 -212
  331. package/dist/utils/scanDepsToOptimize.native.js.map +0 -1
  332. package/dist/utils/state.mjs +0 -28
  333. package/dist/utils/state.mjs.map +0 -1
  334. package/dist/utils/state.native.js +0 -28
  335. package/dist/utils/state.native.js.map +0 -1
  336. package/dist/utils/uniq.mjs +0 -5
  337. package/dist/utils/uniq.mjs.map +0 -1
  338. package/dist/utils/uniq.native.js +0 -5
  339. package/dist/utils/uniq.native.js.map +0 -1
  340. package/dist/utils/utils.mjs +0 -32
  341. package/dist/utils/utils.mjs.map +0 -1
  342. package/dist/utils/utils.native.js +0 -53
  343. package/dist/utils/utils.native.js.map +0 -1
  344. package/dist/vendor/debugger-app/index.mjs +0 -2
  345. package/dist/vendor/debugger-app/index.mjs.map +0 -1
  346. package/dist/vendor/debugger-app/index.native.js +0 -2
  347. package/dist/vendor/debugger-app/index.native.js.map +0 -1
  348. package/dist/vendor/debugger-app/src/debuggerWorker.mjs +0 -2
  349. package/dist/vendor/debugger-app/src/debuggerWorker.mjs.map +0 -1
  350. package/dist/vendor/debugger-app/src/debuggerWorker.native.js +0 -2
  351. package/dist/vendor/debugger-app/src/debuggerWorker.native.js.map +0 -1
  352. package/dist/vendor/debugger-app/src/index.css +0 -41
  353. package/dist/vendor/debugger-app/src/index.css.map +0 -6
  354. package/dist/vendor/debugger-app/src/index.mjs +0 -2
  355. package/dist/vendor/debugger-app/src/index.mjs.map +0 -1
  356. package/dist/vendor/debugger-app/src/index.native.js +0 -2
  357. package/dist/vendor/debugger-app/src/index.native.js.map +0 -1
  358. package/dist/vxrn-vite-plugin.mjs +0 -44
  359. package/dist/vxrn-vite-plugin.mjs.map +0 -1
  360. package/dist/vxrn-vite-plugin.native.js +0 -45
  361. package/dist/vxrn-vite-plugin.native.js.map +0 -1
  362. package/types/cli.d.ts.map +0 -1
  363. package/types/config/getAdditionalViteConfig.d.ts.map +0 -1
  364. package/types/config/getBaseViteConfigOnly.d.ts.map +0 -1
  365. package/types/config/getBaseViteConfigWithPlugins.d.ts.map +0 -1
  366. package/types/config/getBaseVitePlugins.d.ts.map +0 -1
  367. package/types/config/getNonCliModeOnlyVitePlugins.d.ts.map +0 -1
  368. package/types/config/getOptimizeDeps.d.ts.map +0 -1
  369. package/types/config/getOptimizeDeps.test.d.ts.map +0 -1
  370. package/types/config/getOptionsFilled.d.ts.map +0 -1
  371. package/types/config/getReactNativePlugins.d.ts.map +0 -1
  372. package/types/config/getServerOptionsFilled.d.ts.map +0 -1
  373. package/types/config/getServerOptionsFilled.test.d.ts.map +0 -1
  374. package/types/config/getViteServerConfig.d.ts.map +0 -1
  375. package/types/config/mergeUserConfig.d.ts.map +0 -1
  376. package/types/config/mergeUserConfig.test.d.ts.map +0 -1
  377. package/types/constants/defaults.d.ts.map +0 -1
  378. package/types/constants.d.ts.map +0 -1
  379. package/types/exports/build.d.ts.map +0 -1
  380. package/types/exports/clean.d.ts.map +0 -1
  381. package/types/exports/clean.test.d.ts.map +0 -1
  382. package/types/exports/createServer.d.ts.map +0 -1
  383. package/types/exports/dev.d.ts.map +0 -1
  384. package/types/exports/loadEnv.d.ts.map +0 -1
  385. package/types/exports/loadEnv.test.d.ts.map +0 -1
  386. package/types/exports/patch.d.ts.map +0 -1
  387. package/types/exports/prebuild.d.ts.map +0 -1
  388. package/types/exports/prebuildWithoutExpo.d.ts.map +0 -1
  389. package/types/exports/runAndroid.d.ts.map +0 -1
  390. package/types/exports/runIos.d.ts.map +0 -1
  391. package/types/exports/serve.d.ts.map +0 -1
  392. package/types/exports/serveStaticAssets.d.ts.map +0 -1
  393. package/types/index.d.ts.map +0 -1
  394. package/types/patches/builtInDepPatches.d.ts.map +0 -1
  395. package/types/plugins/applyBuiltInPatchesPlugin.d.ts.map +0 -1
  396. package/types/plugins/autoDepOptimizePlugin.d.ts.map +0 -1
  397. package/types/plugins/autoDepOptimizePlugin.test.d.ts.map +0 -1
  398. package/types/plugins/clientInjectPlugin.d.ts.map +0 -1
  399. package/types/plugins/defaultDepOptimizePlugin.d.ts.map +0 -1
  400. package/types/plugins/expoManifestRequestHandlerPlugin.d.ts.map +0 -1
  401. package/types/plugins/getResolvedConfigSubset.d.ts.map +0 -1
  402. package/types/plugins/reactNativeCommonJsPlugin.d.ts.map +0 -1
  403. package/types/plugins/reactNativeDevAssetPlugin.d.ts.map +0 -1
  404. package/types/plugins/reactNativeDevServer.d.ts.map +0 -1
  405. package/types/plugins/resolveIdScan.test.d.ts.map +0 -1
  406. package/types/plugins/rollupRemoveUnusedImports.d.ts.map +0 -1
  407. package/types/plugins/serverExtensions.test.d.ts.map +0 -1
  408. package/types/rn-commands/bundle/buildBundle.d.ts.map +0 -1
  409. package/types/runtime/hmr-client.d.ts.map +0 -1
  410. package/types/runtime/hmr-runtime.d.ts.map +0 -1
  411. package/types/runtime/hmr-types.d.ts.map +0 -1
  412. package/types/runtime/native-prelude.d.ts.map +0 -1
  413. package/types/runtime/react-refresh-utils.d.ts.map +0 -1
  414. package/types/serve/node.d.ts.map +0 -1
  415. package/types/serve/node.test.d.ts.map +0 -1
  416. package/types/types.d.ts.map +0 -1
  417. package/types/user-interface/index.d.ts.map +0 -1
  418. package/types/utils/assert.d.ts.map +0 -1
  419. package/types/utils/bindKeypressInput.d.ts.map +0 -1
  420. package/types/utils/bindKeypressInput.test.d.ts.map +0 -1
  421. package/types/utils/coerceToArray.d.ts.map +0 -1
  422. package/types/utils/connectedNativeClients.d.ts.map +0 -1
  423. package/types/utils/createNativeDevEngine.d.ts.map +0 -1
  424. package/types/utils/createNativeDevEngine.test.d.ts.map +0 -1
  425. package/types/utils/dispose.d.ts.map +0 -1
  426. package/types/utils/environmentUtils.d.ts.map +0 -1
  427. package/types/utils/execSync.d.ts.map +0 -1
  428. package/types/utils/expoRun.d.ts.map +0 -1
  429. package/types/utils/filterViteServerResolvedUrls.d.ts.map +0 -1
  430. package/types/utils/getBoundPort.d.ts.map +0 -1
  431. package/types/utils/getBoundPort.test.d.ts.map +0 -1
  432. package/types/utils/getCacheDir.d.ts.map +0 -1
  433. package/types/utils/getServerEntry.d.ts.map +0 -1
  434. package/types/utils/getVitePath.d.ts.map +0 -1
  435. package/types/utils/globDir.d.ts.map +0 -1
  436. package/types/utils/imageSizePatch.test.d.ts.map +0 -1
  437. package/types/utils/isWithin.d.ts.map +0 -1
  438. package/types/utils/patches.d.ts.map +0 -1
  439. package/types/utils/patches.test.d.ts.map +0 -1
  440. package/types/utils/printServerUrls.d.ts.map +0 -1
  441. package/types/utils/removeUndefined.d.ts.map +0 -1
  442. package/types/utils/scanDepsToOptimize.d.ts.map +0 -1
  443. package/types/utils/state.d.ts.map +0 -1
  444. package/types/utils/uniq.d.ts.map +0 -1
  445. package/types/utils/utils.d.ts.map +0 -1
  446. package/types/vxrn-vite-plugin.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxrn",
3
- "version": "1.25.3",
3
+ "version": "1.25.5",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "exports": {
@@ -62,16 +62,16 @@
62
62
  "@expo/config-plugins": "~57.0.6",
63
63
  "@hono/node-server": "^1.19.14",
64
64
  "@react-native/dev-middleware": "^0.86.2",
65
- "@vxrn/compiler": "1.25.3",
66
- "@vxrn/debug": "1.25.3",
67
- "@vxrn/query-string": "1.25.3",
68
- "@vxrn/resolve": "1.25.3",
69
- "@vxrn/safe-area": "1.25.3",
70
- "@vxrn/url-parse": "1.25.3",
71
- "@vxrn/utils": "1.25.3",
72
- "@vxrn/vendor": "1.25.3",
73
- "@vxrn/vite-flow": "1.25.3",
74
- "@vxrn/vite-plugin-metro": "1.25.3",
65
+ "@vxrn/compiler": "1.25.5",
66
+ "@vxrn/debug": "1.25.5",
67
+ "@vxrn/query-string": "1.25.5",
68
+ "@vxrn/resolve": "1.25.5",
69
+ "@vxrn/safe-area": "1.25.5",
70
+ "@vxrn/url-parse": "1.25.5",
71
+ "@vxrn/utils": "1.25.5",
72
+ "@vxrn/vendor": "1.25.5",
73
+ "@vxrn/vite-flow": "1.25.5",
74
+ "@vxrn/vite-plugin-metro": "1.25.5",
75
75
  "citty": "^0.1.6",
76
76
  "dotenv": "^17.2.1",
77
77
  "dotenv-expand": "^12.0.2",
@@ -1,5 +1,5 @@
1
1
  import type { Connect, Plugin, ViteDevServer } from 'vite'
2
- import { WebSocketServer } from 'ws'
2
+ import { WebSocketServer, type WebSocket } from 'ws'
3
3
  import { createMessageSocket } from '@vxrn/utils'
4
4
  import {
5
5
  addConnectedNativeClient,
@@ -17,6 +17,11 @@ type ClientMessage = {
17
17
  data: string[]
18
18
  }
19
19
 
20
+ type NativeHmrSocket = WebSocket & {
21
+ vxrnClientId: string
22
+ vxrnPlatform: 'ios' | 'android'
23
+ }
24
+
20
25
  export function createReactNativeDevServerPlugin(
21
26
  options?: Partial<
22
27
  Pick<VXRNOptionsFilled, 'cacheDir' | 'debugBundle' | 'debugBundlePaths' | 'entries'>
@@ -61,18 +66,17 @@ export function createReactNativeDevServerPlugin(
61
66
 
62
67
  // rolldown HMR socket (used by rolldown dev() HMR client)
63
68
  if (url.startsWith('/hot')) {
69
+ const hmrUrl = new URL(url, `http://${req.headers.host || 'localhost'}`)
70
+ const platform = validPlatforms[hmrUrl.searchParams.get('platform') || '']
71
+ const clientId = hmrUrl.searchParams.get('clientId')
72
+ if (!platform || !clientId) {
73
+ socket.destroy()
74
+ return
75
+ }
64
76
  hmrWSS.handleUpgrade(req, socket, head, (ws) => {
65
- // listen for module registration messages from client
66
- ws.on('message', async (data: any) => {
67
- try {
68
- const msg = JSON.parse(data.toString())
69
- if (msg.type === 'hmr:module-registered' && msg.modules) {
70
- const currentEngine = devEngines['ios'] || devEngines['android']
71
- if (currentEngine?.engine) {
72
- await currentEngine.engine.registerModules('vxrn-dev', msg.modules)
73
- }
74
- }
75
- } catch {}
77
+ Object.assign(ws, {
78
+ vxrnClientId: clientId,
79
+ vxrnPlatform: platform,
76
80
  })
77
81
  hmrWSS.emit('connection', ws, req)
78
82
  })
@@ -95,17 +99,47 @@ export function createReactNativeDevServerPlugin(
95
99
  }
96
100
  })
97
101
 
98
- hmrWSS.on('connection', (socket) => {
102
+ hmrWSS.on('connection', async (socket: NativeHmrSocket) => {
103
+ const currentEngine = devEngines[socket.vxrnPlatform]
104
+ if (!currentEngine) {
105
+ socket.close(1013, 'native dev engine unavailable')
106
+ return
107
+ }
108
+
109
+ try {
110
+ await currentEngine.engine.registerClient(socket.vxrnClientId)
111
+ } catch (error) {
112
+ console.error('[hmr] failed to register native client', error)
113
+ socket.close(1011, 'native HMR registration failed')
114
+ return
115
+ }
99
116
  addConnectedNativeClient()
100
117
 
101
- socket.on('message', (message) => {
102
- if (message.toString().includes('ping')) {
118
+ socket.on('message', async (message) => {
119
+ const value = message.toString()
120
+ if (value === 'ping') {
103
121
  socket.send('pong')
122
+ return
123
+ }
124
+
125
+ let update: { type?: string }
126
+ try {
127
+ update = JSON.parse(value)
128
+ } catch {
129
+ return
130
+ }
131
+ if (update.type === 'hmr:invalidate') {
132
+ currentEngine.engine.triggerFullBuild()
133
+ await currentEngine.engine.ensureLatestBuildOutput()
134
+ socket.send(JSON.stringify({ type: 'hmr:reload' }))
104
135
  }
105
136
  })
106
137
 
107
138
  socket.on('close', () => {
108
139
  removeConnectedNativeClient()
140
+ currentEngine.engine.removeClient(socket.vxrnClientId).catch((error) => {
141
+ console.error('[hmr] failed to remove native client', error)
142
+ })
109
143
  })
110
144
 
111
145
  socket.on('error', (error) => {
@@ -181,8 +215,14 @@ export function createReactNativeDevServerPlugin(
181
215
  serverUrl: `http://${typeof host === 'string' && host !== '0.0.0.0' ? host : 'localhost'}:${getBoundPort(server)}`,
182
216
  onHmrUpdate: (update) => {
183
217
  const msg = JSON.stringify(update)
184
- hmrWSS.clients.forEach((client: any) => {
185
- if (client.readyState === 1) {
218
+ hmrWSS.clients.forEach((client) => {
219
+ const nativeClient = client as NativeHmrSocket
220
+ if (
221
+ nativeClient.readyState === 1 &&
222
+ nativeClient.vxrnPlatform === platform &&
223
+ (update.type === 'hmr:error' ||
224
+ nativeClient.vxrnClientId === update.clientId)
225
+ ) {
186
226
  client.send(msg)
187
227
  }
188
228
  })
@@ -1,12 +1,107 @@
1
+ import { mkdtemp, rm, writeFile } from 'node:fs/promises'
2
+ import { tmpdir } from 'node:os'
3
+ import { join } from 'node:path'
4
+ import { dev } from 'rolldown/experimental'
1
5
  import { describe, expect, it } from 'vitest'
2
6
  import {
3
7
  getHermesSWCIncludes,
8
+ getHmrRuntimeSource,
4
9
  getNativeTransformConfig,
5
10
  hmrClientNoopPlugin,
6
11
  vxrnCompilerPlugin,
7
12
  wrapNativeBundleModuleScope,
8
13
  } from './createNativeDevEngine'
9
14
 
15
+ describe('native Rolldown HMR runtime', () => {
16
+ it(
17
+ 'registers a Rolldown 1.2 client and applies a self-accepted patch',
18
+ { timeout: 30_000 },
19
+ async () => {
20
+ const testRoot = await mkdtemp(join(tmpdir(), 'vxrn-native-hmr-'))
21
+ const entry = join(testRoot, 'entry.js')
22
+ const source = (version: string) => `
23
+ globalThis.__vxrnHmrBody = '${version}'
24
+ export const value = '${version}'
25
+ if (import.meta.hot) {
26
+ import.meta.hot.accept((next) => {
27
+ globalThis.__vxrnHmrAccepted = next.value
28
+ })
29
+ }
30
+ `
31
+ await writeFile(entry, source('v1'))
32
+
33
+ let resolveInitialOutput!: (output: any) => void
34
+ const initialOutput = new Promise<any>((resolve) => {
35
+ resolveInitialOutput = resolve
36
+ })
37
+ let resolveHmrUpdate!: (output: any) => void
38
+ const hmrUpdate = new Promise<any>((resolve) => {
39
+ resolveHmrUpdate = resolve
40
+ })
41
+ const engine = await dev(
42
+ {
43
+ cwd: testRoot,
44
+ input: entry,
45
+ experimental: { devMode: { implement: getHmrRuntimeSource() } },
46
+ },
47
+ { format: 'esm' },
48
+ {
49
+ onOutput(result) {
50
+ resolveInitialOutput(result)
51
+ },
52
+ onHmrUpdates(result) {
53
+ if (!(result instanceof Error) && result.changedFiles.length) {
54
+ resolveHmrUpdate(result)
55
+ }
56
+ },
57
+ }
58
+ )
59
+
60
+ try {
61
+ await engine.run()
62
+ const initial = await initialOutput
63
+ if (initial instanceof Error) throw initial
64
+ const chunk = initial.output.find(
65
+ (item: any) => item.type === 'chunk' && item.isEntry
66
+ )
67
+ expect(chunk).toBeTruthy()
68
+
69
+ delete (globalThis as any).__rolldown_runtime__
70
+ await import(
71
+ `data:text/javascript;base64,${Buffer.from(chunk.code).toString('base64')}`
72
+ )
73
+ const runtime = (globalThis as any).__rolldown_runtime__
74
+ expect(typeof runtime.clientId).toBe('string')
75
+ await engine.registerClient(runtime.clientId)
76
+
77
+ await new Promise((resolve) => setTimeout(resolve, 100))
78
+ await writeFile(entry, source('v2'))
79
+ const result = await Promise.race([
80
+ hmrUpdate,
81
+ new Promise((_, reject) =>
82
+ setTimeout(() => reject(new Error('timed out waiting for HMR patch')), 10_000)
83
+ ),
84
+ ])
85
+ const patch = result.updates.find(
86
+ (item: any) =>
87
+ item.clientId === runtime.clientId && item.update.type === 'Patch'
88
+ )?.update
89
+ expect(patch).toBeTruthy()
90
+
91
+ expect(runtime.applyHmrUpdate(patch.code, patch.changedIds, patch.seq)).toBe(true)
92
+ expect((globalThis as any).__vxrnHmrBody).toBe('v2')
93
+ expect((globalThis as any).__vxrnHmrAccepted).toBe('v2')
94
+ } finally {
95
+ await engine.close()
96
+ await rm(testRoot, { recursive: true, force: true })
97
+ delete (globalThis as any).__rolldown_runtime__
98
+ delete (globalThis as any).__vxrnHmrBody
99
+ delete (globalThis as any).__vxrnHmrAccepted
100
+ }
101
+ }
102
+ )
103
+ })
104
+
10
105
  // use a root with no .env files so only the platform defines are present
11
106
  const root = '/tmp/vxrn-native-env-define-test-nonexistent'
12
107
 
@@ -10,6 +10,7 @@ import { basename, dirname, extname, join, relative, resolve } from 'node:path'
10
10
  import { copyFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs'
11
11
  import { pathToFileURL } from 'node:url'
12
12
  import type { InputOptions, OutputOptions, Plugin, RolldownOutput } from 'rolldown'
13
+ import type { DevEngine } from 'rolldown/experimental'
13
14
  import { normalizePath } from 'vite'
14
15
  import { DEFAULT_ASSET_EXTS } from '../constants/defaults'
15
16
  import { getNativePrelude } from '../runtime/native-prelude'
@@ -47,11 +48,22 @@ interface NativeDevEngineOptions {
47
48
  platform: 'ios' | 'android'
48
49
  serverUrl?: string
49
50
  plugins?: Plugin[]
50
- onHmrUpdate?: (update: { type: string; code?: string }) => void
51
+ onHmrUpdate?: (update: NativeHmrUpdate) => void
51
52
  }
52
53
 
54
+ export type NativeHmrUpdate =
55
+ | {
56
+ type: 'hmr:update'
57
+ clientId: string
58
+ code: string
59
+ changedIds: string[]
60
+ seq: number
61
+ }
62
+ | { type: 'hmr:reload'; clientId: string }
63
+ | { type: 'hmr:error' }
64
+
53
65
  interface NativeDevEngineResult {
54
- engine: any
66
+ engine: DevEngine
55
67
  getBundle: () => Promise<{ code: string }>
56
68
  close: () => Promise<void>
57
69
  }
@@ -227,7 +239,7 @@ function getNativePlugins(
227
239
  // flowStripPlugin so react-native's Flow `.js` specs reach codegen with their
228
240
  // type argument intact. stripping Flow first would erase it (which is why the
229
241
  // codegen "didn't run for <Component>" warning fired).
230
- vxrnCompilerPlugin(platform, dev),
242
+ vxrnCompilerPlugin(platform, dev, root),
231
243
  // strip Flow from any react-native / @react-native `.js` the compiler didn't
232
244
  // handle, the guaranteed safety net before rolldown's oxc core parse (which
233
245
  // can't parse Flow). now downstream of the compiler, so codegen sees the types.
@@ -450,18 +462,18 @@ export async function createNativeDevEngine(
450
462
  outro: `
451
463
  try {
452
464
  var __WS = (init_WebSocket(), __toCommonJS(WebSocket_exports)).default;
453
- var __hmrUrl = 'ws://${resolvedHost}:${port}/hot';
465
+ var __hmrUrl = 'ws://${resolvedHost}:${port}/hot?platform=${platform}&clientId=' + encodeURIComponent(__rolldown_runtime__.clientId);
454
466
  var __hmrWS = new __WS(__hmrUrl);
455
467
  __hmrWS.onmessage = function(event) {
456
468
  try {
457
469
  var msg = JSON.parse(event.data);
458
470
  var g = typeof global !== 'undefined' ? global : globalThis;
459
471
  if (msg.type === 'hmr:update' && msg.code) {
460
- if (g.globalEvalWithSourceUrl) g.globalEvalWithSourceUrl(msg.code);
461
- else (0, eval)(msg.code);
462
- setTimeout(function() {
463
- try { if (g.__ReactRefresh) g.__ReactRefresh.performReactRefresh(); } catch(e) {}
464
- }, 50);
472
+ var applied = __rolldown_runtime__.applyHmrUpdate(msg.code, msg.changedIds, msg.seq);
473
+ if (!applied) {
474
+ var updateSettings = g.__turboModuleProxy ? g.__turboModuleProxy('DevSettings') : null;
475
+ if (updateSettings && updateSettings.reload) updateSettings.reload();
476
+ }
465
477
  } else if (msg.type === 'hmr:reload') {
466
478
  var ds = g.__turboModuleProxy ? g.__turboModuleProxy('DevSettings') : null;
467
479
  if (ds && ds.reload) ds.reload();
@@ -470,7 +482,7 @@ try {
470
482
  };
471
483
  __hmrWS.onopen = function() {
472
484
  if (typeof __rolldown_runtime__ !== 'undefined' && __rolldown_runtime__.setup) {
473
- __rolldown_runtime__.setup(__hmrWS, __hmrUrl.replace('ws://', 'http://'));
485
+ __rolldown_runtime__.setup(__hmrWS);
474
486
  }
475
487
  };
476
488
  __hmrWS.onerror = function(e) { console.warn('[vxrn] HMR connection error:', e.message || e); };
@@ -515,38 +527,36 @@ try {
515
527
  onHmrUpdate?.({ type: 'hmr:error' })
516
528
  return
517
529
  }
518
- const updates = (result as any).updates || []
519
- for (const item of updates) {
520
- const update = item.update || item
530
+ for (const { clientId, update } of result.updates) {
521
531
  if (update.type === 'Patch' && update.code) {
522
- onHmrUpdate?.({ type: 'hmr:update', code: update.code })
532
+ onHmrUpdate?.({
533
+ type: 'hmr:update',
534
+ clientId,
535
+ code: update.code,
536
+ changedIds: update.changedIds,
537
+ seq: update.seq,
538
+ })
523
539
  } else if (update.type === 'FullReload') {
524
- onHmrUpdate?.({ type: 'hmr:reload' })
540
+ onHmrUpdate?.({ type: 'hmr:reload', clientId })
525
541
  }
526
542
  }
527
-
528
- if (updates.length === 0) {
529
- onHmrUpdate?.({ type: 'hmr:reload' })
530
- }
531
543
  },
532
544
 
533
- // rolldown 1.2 dropped 'auto': the server no longer decides full reloads,
534
- // so callers pull fresh output explicitly instead. getBundle() below
535
- // already awaits ensureLatestBuildOutput(), which is that explicit pull,
536
- // so 'never' keeps the same behavior without rebuilding on every hmr patch.
545
+ // patches update the registered client runtime directly. a full bundle rebuild
546
+ // is only needed when the runtime requests a reload.
537
547
  rebuildStrategy: 'never',
538
548
  watch: {},
539
549
  })
540
550
 
541
551
  await engine.run()
542
552
 
543
- // modules are registered via WebSocket messages from the HMR client
544
- // (the devMode runtime sends hmr:module-registered messages)
545
-
546
553
  return {
547
554
  engine,
548
555
 
549
556
  async getBundle() {
557
+ // a runtime invalidation marks the full output stale before reloading. pull
558
+ // that output before serving the cached bundle to the restarted app.
559
+ await engine.ensureLatestBuildOutput()
550
560
  if (currentBundle) return currentBundle
551
561
  if (!bundlePromise) {
552
562
  let timeoutId: ReturnType<typeof setTimeout>
@@ -561,8 +571,6 @@ try {
561
571
  )
562
572
  })
563
573
  }
564
- await engine.ensureLatestBuildOutput()
565
- if (currentBundle) return currentBundle
566
574
  return bundlePromise
567
575
  },
568
576
 
@@ -889,7 +897,11 @@ function cssStubPlugin(): Plugin {
889
897
  * react-native codegen, react compiler, and react-refresh (dev only) —
890
898
  * same pipeline as metro, single babel pass per file.
891
899
  */
892
- export function vxrnCompilerPlugin(platform: string, dev: boolean): Plugin {
900
+ export function vxrnCompilerPlugin(
901
+ platform: string,
902
+ dev: boolean,
903
+ projectRoot = process.cwd()
904
+ ): Plugin {
893
905
  let compiler: typeof import('@vxrn/compiler') | null = null
894
906
 
895
907
  // whether a file is a user file that should get react-refresh wiring
@@ -913,6 +925,7 @@ export function vxrnCompilerPlugin(platform: string, dev: boolean): Plugin {
913
925
  const props = {
914
926
  id,
915
927
  code,
928
+ projectRoot,
916
929
  development: dev,
917
930
  environment: platform as 'ios' | 'android',
918
931
  reactForRNVersion: '19' as const,
@@ -1145,33 +1158,40 @@ function hermesCompatSWCPlugin(dev: boolean): Plugin {
1145
1158
 
1146
1159
  // --- HMR runtime ---
1147
1160
 
1148
- function getHmrRuntimeSource(): string {
1161
+ export function getHmrRuntimeSource(): string {
1149
1162
  return `
1150
1163
  // vxrn HMR runtime for rolldown devMode
1151
1164
  var BaseDevRuntime = DevRuntime;
1152
1165
 
1153
1166
  class ReactNativeDevRuntime extends BaseDevRuntime {
1154
1167
  constructor() {
1155
- var _shared = { _socket: null, _queue: [] };
1156
1168
  var clientId = 'rn-' + Date.now() + '-' + Math.random().toString(36).slice(2);
1157
- super({ send: function(msg) {
1158
- var s = JSON.stringify(msg);
1159
- if (_shared._socket && _shared._socket.readyState === 1) { _shared._socket.send(s); }
1160
- else { _shared._queue.push(s); }
1161
- }}, clientId);
1162
- this._shared = _shared;
1169
+ super(clientId);
1163
1170
  this._socket = null;
1164
- this._queue = [];
1165
1171
  this.moduleHotContexts = {};
1172
+ this.lastSeq = 0;
1166
1173
  }
1167
1174
 
1168
1175
  createModuleHotContext(moduleId) {
1176
+ var runtime = this;
1169
1177
  var ctx = {
1170
1178
  acceptCallbacks: [],
1171
- accept: function(cb) {
1172
- if (cb) ctx.acceptCallbacks.push({ deps: [moduleId], fn: cb });
1179
+ accept: function(deps, callback) {
1180
+ if (typeof deps === 'function' || !deps) {
1181
+ ctx.acceptCallbacks.push({
1182
+ deps: [moduleId],
1183
+ fn: function(modules) { if (typeof deps === 'function') deps(modules[0]); }
1184
+ });
1185
+ } else if (typeof deps === 'string') {
1186
+ ctx.acceptCallbacks.push({
1187
+ deps: [deps],
1188
+ fn: function(modules) { if (callback) callback(modules[0]); }
1189
+ });
1190
+ } else if (Array.isArray(deps)) {
1191
+ ctx.acceptCallbacks.push({ deps: deps, fn: callback || function() {} });
1192
+ }
1173
1193
  },
1174
- invalidate: function() {},
1194
+ invalidate: function() { runtime.requestReload('module invalidated: ' + moduleId); },
1175
1195
  on: function() {},
1176
1196
  off: function() {},
1177
1197
  send: function() {},
@@ -1202,55 +1222,112 @@ class ReactNativeDevRuntime extends BaseDevRuntime {
1202
1222
  return ctx;
1203
1223
  }
1204
1224
 
1205
- applyUpdates(boundaries) {
1206
- for (var i = 0; i < boundaries.length; i++) {
1207
- var moduleId = boundaries[i][0];
1208
- var ctx = this.moduleHotContexts[moduleId];
1209
- if (ctx && ctx.acceptCallbacks) {
1210
- for (var j = 0; j < ctx.acceptCallbacks.length; j++) {
1211
- ctx.acceptCallbacks[j].fn(this.modules[moduleId].exports);
1212
- }
1225
+ isSelfAccepted(moduleId) {
1226
+ var ctx = this.moduleHotContexts[moduleId];
1227
+ return !!(ctx && ctx.acceptCallbacks.some(function(callback) {
1228
+ return callback.deps.indexOf(moduleId) !== -1;
1229
+ }));
1230
+ }
1231
+
1232
+ acceptsDependency(parentId, moduleId) {
1233
+ var ctx = this.moduleHotContexts[parentId];
1234
+ return !!(ctx && ctx.acceptCallbacks.some(function(callback) {
1235
+ return callback.deps.indexOf(moduleId) !== -1;
1236
+ }));
1237
+ }
1238
+
1239
+ findBoundaries(moduleId, traversed, updateSet, boundaries) {
1240
+ if (traversed.has(moduleId)) return true;
1241
+ traversed.add(moduleId);
1242
+ updateSet.add(moduleId);
1243
+
1244
+ if (this.isSelfAccepted(moduleId)) {
1245
+ boundaries.push({ boundary: moduleId, acceptedVia: moduleId });
1246
+ return true;
1247
+ }
1248
+
1249
+ var importers = this.getImporters(moduleId).filter(function(importer) {
1250
+ return this.isExecuted(importer);
1251
+ }, this);
1252
+ if (importers.length === 0) return false;
1253
+
1254
+ for (var i = 0; i < importers.length; i++) {
1255
+ var importer = importers[i];
1256
+ if (this.acceptsDependency(importer, moduleId)) {
1257
+ boundaries.push({ boundary: importer, acceptedVia: moduleId });
1258
+ } else if (!this.findBoundaries(importer, traversed, updateSet, boundaries)) {
1259
+ return false;
1260
+ }
1261
+ }
1262
+ return true;
1263
+ }
1264
+
1265
+ applyHmrUpdate(code, changedIds, seq) {
1266
+ if (seq !== this.lastSeq + 1) return false;
1267
+ this.lastSeq = seq;
1268
+
1269
+ var traversed = new Set();
1270
+ var updateSet = new Set();
1271
+ var boundaries = [];
1272
+ for (var i = 0; i < changedIds.length; i++) {
1273
+ var changedId = changedIds[i];
1274
+ if (!this.isExecuted(changedId)) continue;
1275
+ if (!this.findBoundaries(changedId, traversed, updateSet, boundaries)) return false;
1276
+ }
1277
+ if (boundaries.length === 0) return true;
1278
+
1279
+ var callbacks = boundaries.map(function(item) {
1280
+ var ctx = this.moduleHotContexts[item.boundary];
1281
+ return {
1282
+ boundary: item.boundary,
1283
+ acceptedVia: item.acceptedVia,
1284
+ callbacks: ctx ? ctx.acceptCallbacks.filter(function(callback) {
1285
+ return callback.deps.indexOf(item.acceptedVia) !== -1;
1286
+ }) : []
1287
+ };
1288
+ }, this);
1289
+
1290
+ if (globalThis.globalEvalWithSourceUrl) globalThis.globalEvalWithSourceUrl(code);
1291
+ else (0, eval)(code);
1292
+
1293
+ var modulesToReplace = Array.from(updateSet);
1294
+ for (var j = 0; j < modulesToReplace.length; j++) {
1295
+ if (!this.hasFactory(modulesToReplace[j])) return false;
1296
+ }
1297
+ for (var k = 0; k < modulesToReplace.length; k++) {
1298
+ this.removeModuleCache(modulesToReplace[k]);
1299
+ }
1300
+
1301
+ for (var m = 0; m < callbacks.length; m++) {
1302
+ var apply = callbacks[m];
1303
+ this.initModule(apply.acceptedVia);
1304
+ var freshExports = this.loadExports(apply.acceptedVia);
1305
+ for (var n = 0; n < apply.callbacks.length; n++) {
1306
+ apply.callbacks[n].fn([freshExports]);
1213
1307
  }
1214
- // surface each committed module id to the framework hot-update hook (if one
1215
- // is registered). RN's React Refresh can't repaint frameworks that re-wrap
1216
- // route components away from the edited module's Refresh family (e.g. One),
1217
- // and the web route-update event has no equivalent on the native /hot
1218
- // socket, so this generic vxrn global is the bridge.
1308
+ }
1309
+
1310
+ for (var p = 0; p < changedIds.length; p++) {
1219
1311
  try {
1220
- if (globalThis.__VXRN_ON_MODULE_UPDATED__ && moduleId) globalThis.__VXRN_ON_MODULE_UPDATED__(moduleId);
1312
+ if (globalThis.__VXRN_ON_MODULE_UPDATED__) {
1313
+ globalThis.__VXRN_ON_MODULE_UPDATED__(changedIds[p]);
1314
+ }
1221
1315
  } catch (error) {
1222
1316
  console.error('[vxrn HMR]: module update hook failed', error);
1223
1317
  }
1224
1318
  }
1319
+ return true;
1225
1320
  }
1226
1321
 
1227
- setup(socket, origin) {
1228
- if (this._socket) return;
1229
- this._socket = socket;
1230
- // also set the shared messenger socket so queued messages can flush
1231
- if (this._shared) this._shared._socket = socket;
1232
-
1233
- var flushQueues = function() {
1234
- // flush messenger queue
1235
- if (this._shared && this._shared._queue.length) {
1236
- for (var i = 0; i < this._shared._queue.length; i++) socket.send(this._shared._queue[i]);
1237
- this._shared._queue = [];
1238
- }
1239
- // flush instance queue
1240
- for (var i = 0; i < this._queue.length; i++) socket.send(this._queue[i]);
1241
- this._queue = [];
1242
- }.bind(this);
1243
-
1244
- if (socket.readyState === 1) {
1245
- flushQueues();
1246
- } else {
1247
- socket.addEventListener('open', function() {
1248
- flushQueues();
1249
- }, { once: true });
1322
+ requestReload(reason) {
1323
+ if (this._socket && this._socket.readyState === 1) {
1324
+ this._socket.send(JSON.stringify({ type: 'hmr:invalidate', reason: reason }));
1250
1325
  }
1326
+ }
1251
1327
 
1252
- // HMR message handling is done by the outro WebSocket handler
1253
- // the runtime's setup() only needs to flush queued messages
1328
+ setup(socket) {
1329
+ if (this._socket) return;
1330
+ this._socket = socket;
1254
1331
  }
1255
1332
  }
1256
1333
 
@@ -6,6 +6,7 @@
6
6
  * https://github.com/leegeunhyeok/rollipop
7
7
  */
8
8
  import type { Plugin } from 'rolldown';
9
+ import type { DevEngine } from 'rolldown/experimental';
9
10
  /** SWC `env.include` for Hermes-compatible downleveling; see HERMES_CLASS_TRANSFORMS. */
10
11
  export declare function getHermesSWCIncludes(dev: boolean): string[];
11
12
  interface NativeDevEngineOptions {
@@ -15,13 +16,22 @@ interface NativeDevEngineOptions {
15
16
  platform: 'ios' | 'android';
16
17
  serverUrl?: string;
17
18
  plugins?: Plugin[];
18
- onHmrUpdate?: (update: {
19
- type: string;
20
- code?: string;
21
- }) => void;
19
+ onHmrUpdate?: (update: NativeHmrUpdate) => void;
22
20
  }
21
+ export type NativeHmrUpdate = {
22
+ type: 'hmr:update';
23
+ clientId: string;
24
+ code: string;
25
+ changedIds: string[];
26
+ seq: number;
27
+ } | {
28
+ type: 'hmr:reload';
29
+ clientId: string;
30
+ } | {
31
+ type: 'hmr:error';
32
+ };
23
33
  interface NativeDevEngineResult {
24
- engine: any;
34
+ engine: DevEngine;
25
35
  getBundle: () => Promise<{
26
36
  code: string;
27
37
  }>;
@@ -102,6 +112,7 @@ export declare function hmrClientNoopPlugin(): Plugin;
102
112
  * react-native codegen, react compiler, and react-refresh (dev only) —
103
113
  * same pipeline as metro, single babel pass per file.
104
114
  */
105
- export declare function vxrnCompilerPlugin(platform: string, dev: boolean): Plugin;
115
+ export declare function vxrnCompilerPlugin(platform: string, dev: boolean, projectRoot?: string): Plugin;
116
+ export declare function getHmrRuntimeSource(): string;
106
117
  export {};
107
118
  //# sourceMappingURL=createNativeDevEngine.d.ts.map