@vxrn/vite-plugin-metro 2.0.0-beta.33.1 → 2.0.0-beta.46.1

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 (290) hide show
  1. package/dist/cjs/babel-plugins/import-meta-env-plugin.cjs +84 -102
  2. package/dist/cjs/babel-plugins/import-meta-env-plugin.native.cjs +108 -0
  3. package/dist/cjs/babel-plugins/import-meta-env-plugin.native.js +90 -107
  4. package/dist/cjs/babel-plugins/import-meta-env-plugin.native.js.map +1 -1
  5. package/dist/cjs/env/platformEnv.cjs +55 -57
  6. package/dist/cjs/env/platformEnv.native.cjs +93 -0
  7. package/dist/cjs/env/platformEnv.native.js +72 -75
  8. package/dist/cjs/env/platformEnv.native.js.map +1 -1
  9. package/dist/cjs/index.cjs +22 -24
  10. package/dist/cjs/index.native.cjs +41 -0
  11. package/dist/cjs/index.native.js +22 -23
  12. package/dist/cjs/index.native.js.map +1 -1
  13. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.cjs +48 -51
  14. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.cjs +101 -0
  15. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js +88 -94
  16. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +1 -1
  17. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.cjs +249 -256
  18. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.cjs +295 -0
  19. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js +260 -266
  20. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
  21. package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.cjs +38 -44
  22. package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.cjs +53 -0
  23. package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js +39 -44
  24. package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js.map +1 -1
  25. package/dist/cjs/metro-config/types.cjs +9 -11
  26. package/dist/cjs/metro-config/types.native.cjs +18 -0
  27. package/dist/cjs/metro-config/types.native.js +9 -10
  28. package/dist/cjs/metro-config/types.native.js.map +1 -1
  29. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.cjs +44 -56
  30. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.cjs +62 -0
  31. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js +45 -63
  32. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js.map +1 -1
  33. package/dist/cjs/plugins/metroPlugin.cjs +210 -248
  34. package/dist/cjs/plugins/metroPlugin.native.cjs +242 -0
  35. package/dist/cjs/plugins/metroPlugin.native.js +216 -253
  36. package/dist/cjs/plugins/metroPlugin.native.js.map +1 -1
  37. package/dist/cjs/rn-commands/bundle/assetCatalogIOS.cjs +56 -65
  38. package/dist/cjs/rn-commands/bundle/assetCatalogIOS.native.cjs +121 -0
  39. package/dist/cjs/rn-commands/bundle/assetCatalogIOS.native.js +94 -106
  40. package/dist/cjs/rn-commands/bundle/assetCatalogIOS.native.js.map +1 -1
  41. package/dist/cjs/rn-commands/bundle/assetPathUtils.cjs +51 -55
  42. package/dist/cjs/rn-commands/bundle/assetPathUtils.native.cjs +72 -0
  43. package/dist/cjs/rn-commands/bundle/assetPathUtils.native.js +51 -54
  44. package/dist/cjs/rn-commands/bundle/assetPathUtils.native.js.map +1 -1
  45. package/dist/cjs/rn-commands/bundle/buildBundle.cjs +37 -46
  46. package/dist/cjs/rn-commands/bundle/buildBundle.native.cjs +57 -0
  47. package/dist/cjs/rn-commands/bundle/buildBundle.native.js +39 -47
  48. package/dist/cjs/rn-commands/bundle/buildBundle.native.js.map +1 -1
  49. package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.cjs +57 -68
  50. package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.native.cjs +81 -0
  51. package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.native.js +59 -70
  52. package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.native.js.map +1 -1
  53. package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.cjs +37 -39
  54. package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.native.cjs +70 -0
  55. package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.native.js +56 -59
  56. package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.native.js.map +1 -1
  57. package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.cjs +20 -29
  58. package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.native.cjs +39 -0
  59. package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.native.js +20 -28
  60. package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.native.js.map +1 -1
  61. package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.cjs +20 -33
  62. package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.native.cjs +38 -0
  63. package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.native.js +20 -32
  64. package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.native.js.map +1 -1
  65. package/dist/cjs/rn-commands/bundle/getBuildBundleFn.cjs +23 -32
  66. package/dist/cjs/rn-commands/bundle/getBuildBundleFn.native.cjs +38 -0
  67. package/dist/cjs/rn-commands/bundle/getBuildBundleFn.native.js +23 -31
  68. package/dist/cjs/rn-commands/bundle/getBuildBundleFn.native.js.map +1 -1
  69. package/dist/cjs/rn-commands/bundle/index.cjs +15 -17
  70. package/dist/cjs/rn-commands/bundle/index.native.cjs +30 -0
  71. package/dist/cjs/rn-commands/bundle/index.native.js +15 -16
  72. package/dist/cjs/rn-commands/bundle/index.native.js.map +1 -1
  73. package/dist/cjs/rn-commands/bundle/saveAssets.cjs +85 -96
  74. package/dist/cjs/rn-commands/bundle/saveAssets.native.cjs +129 -0
  75. package/dist/cjs/rn-commands/bundle/saveAssets.native.js +102 -114
  76. package/dist/cjs/rn-commands/bundle/saveAssets.native.js.map +1 -1
  77. package/dist/cjs/rn-commands/bundle/types.cjs +9 -11
  78. package/dist/cjs/rn-commands/bundle/types.native.cjs +18 -0
  79. package/dist/cjs/rn-commands/bundle/types.native.js +9 -10
  80. package/dist/cjs/rn-commands/bundle/types.native.js.map +1 -1
  81. package/dist/cjs/rn-commands/index.cjs +17 -26
  82. package/dist/cjs/rn-commands/index.native.cjs +32 -0
  83. package/dist/cjs/rn-commands/index.native.js +17 -25
  84. package/dist/cjs/rn-commands/index.native.js.map +1 -1
  85. package/dist/cjs/transformer/babel-core.cjs +16 -18
  86. package/dist/cjs/transformer/babel-core.native.cjs +30 -0
  87. package/dist/cjs/transformer/babel-core.native.js +16 -17
  88. package/dist/cjs/transformer/babel-core.native.js.map +1 -1
  89. package/dist/cjs/transformer/babel-transformer.cjs +101 -152
  90. package/dist/cjs/transformer/babel-transformer.native.cjs +131 -0
  91. package/dist/cjs/transformer/babel-transformer.native.js +106 -159
  92. package/dist/cjs/transformer/babel-transformer.native.js.map +1 -1
  93. package/dist/cjs/transformer/loadBabelConfig.cjs +44 -49
  94. package/dist/cjs/transformer/loadBabelConfig.native.cjs +64 -0
  95. package/dist/cjs/transformer/loadBabelConfig.native.js +48 -52
  96. package/dist/cjs/transformer/loadBabelConfig.native.js.map +1 -1
  97. package/dist/cjs/transformer/metroNativeWorker.cjs +1442 -1480
  98. package/dist/cjs/transformer/metroNativeWorker.native.cjs +2536 -0
  99. package/dist/cjs/transformer/metroNativeWorker.native.js +2416 -2552
  100. package/dist/cjs/transformer/metroNativeWorker.native.js.map +1 -1
  101. package/dist/cjs/transformer/transformSync.cjs +47 -63
  102. package/dist/cjs/transformer/transformSync.native.cjs +74 -0
  103. package/dist/cjs/transformer/transformSync.native.js +49 -64
  104. package/dist/cjs/transformer/transformSync.native.js.map +1 -1
  105. package/dist/cjs/transformer/types.cjs +9 -11
  106. package/dist/cjs/transformer/types.native.cjs +18 -0
  107. package/dist/cjs/transformer/types.native.js +9 -10
  108. package/dist/cjs/transformer/types.native.js.map +1 -1
  109. package/dist/cjs/utils/exit.cjs +141 -139
  110. package/dist/cjs/utils/exit.native.cjs +266 -0
  111. package/dist/cjs/utils/exit.native.js +228 -241
  112. package/dist/cjs/utils/exit.native.js.map +1 -1
  113. package/dist/cjs/utils/getTerminalReporter.cjs +35 -47
  114. package/dist/cjs/utils/getTerminalReporter.native.cjs +57 -0
  115. package/dist/cjs/utils/getTerminalReporter.native.js +38 -49
  116. package/dist/cjs/utils/getTerminalReporter.native.js.map +1 -1
  117. package/dist/cjs/utils/metroCacheManager.cjs +84 -99
  118. package/dist/cjs/utils/metroCacheManager.native.cjs +130 -0
  119. package/dist/cjs/utils/metroCacheManager.native.js +102 -118
  120. package/dist/cjs/utils/metroCacheManager.native.js.map +1 -1
  121. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.cjs +24 -28
  122. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.cjs +37 -0
  123. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +24 -27
  124. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +1 -1
  125. package/dist/cjs/utils/projectImport.cjs +40 -51
  126. package/dist/cjs/utils/projectImport.native.cjs +64 -0
  127. package/dist/cjs/utils/projectImport.native.js +41 -58
  128. package/dist/cjs/utils/projectImport.native.js.map +1 -1
  129. package/dist/esm/babel-plugins/import-meta-env-plugin.mjs +72 -86
  130. package/dist/esm/babel-plugins/import-meta-env-plugin.mjs.map +1 -1
  131. package/dist/esm/babel-plugins/import-meta-env-plugin.native.js +78 -92
  132. package/dist/esm/babel-plugins/import-meta-env-plugin.native.js.map +1 -1
  133. package/dist/esm/env/platformEnv.mjs +40 -39
  134. package/dist/esm/env/platformEnv.mjs.map +1 -1
  135. package/dist/esm/env/platformEnv.native.js +57 -58
  136. package/dist/esm/env/platformEnv.native.js.map +1 -1
  137. package/dist/esm/index.js +3 -3
  138. package/dist/esm/index.mjs +3 -3
  139. package/dist/esm/index.native.js +3 -3
  140. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs +35 -33
  141. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs.map +1 -1
  142. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js +75 -77
  143. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +1 -1
  144. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs +233 -231
  145. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs.map +1 -1
  146. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js +244 -242
  147. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
  148. package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.mjs +26 -26
  149. package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.mjs.map +1 -1
  150. package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js +27 -27
  151. package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js.map +1 -1
  152. package/dist/esm/metro-config/types.mjs +0 -2
  153. package/dist/esm/metro-config/types.native.js +0 -2
  154. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs +32 -38
  155. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs.map +1 -1
  156. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js +33 -46
  157. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js.map +1 -1
  158. package/dist/esm/plugins/metroPlugin.mjs +195 -222
  159. package/dist/esm/plugins/metroPlugin.mjs.map +1 -1
  160. package/dist/esm/plugins/metroPlugin.native.js +201 -228
  161. package/dist/esm/plugins/metroPlugin.native.js.map +1 -1
  162. package/dist/esm/rn-commands/bundle/assetCatalogIOS.mjs +38 -38
  163. package/dist/esm/rn-commands/bundle/assetCatalogIOS.mjs.map +1 -1
  164. package/dist/esm/rn-commands/bundle/assetCatalogIOS.native.js +76 -80
  165. package/dist/esm/rn-commands/bundle/assetCatalogIOS.native.js.map +1 -1
  166. package/dist/esm/rn-commands/bundle/assetPathUtils.mjs +38 -37
  167. package/dist/esm/rn-commands/bundle/assetPathUtils.mjs.map +1 -1
  168. package/dist/esm/rn-commands/bundle/assetPathUtils.native.js +38 -37
  169. package/dist/esm/rn-commands/bundle/assetPathUtils.native.js.map +1 -1
  170. package/dist/esm/rn-commands/bundle/buildBundle.mjs +25 -28
  171. package/dist/esm/rn-commands/bundle/buildBundle.mjs.map +1 -1
  172. package/dist/esm/rn-commands/bundle/buildBundle.native.js +27 -30
  173. package/dist/esm/rn-commands/bundle/buildBundle.native.js.map +1 -1
  174. package/dist/esm/rn-commands/bundle/buildBundleWithConfig.mjs +43 -43
  175. package/dist/esm/rn-commands/bundle/buildBundleWithConfig.mjs.map +1 -1
  176. package/dist/esm/rn-commands/bundle/buildBundleWithConfig.native.js +45 -46
  177. package/dist/esm/rn-commands/bundle/buildBundleWithConfig.native.js.map +1 -1
  178. package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.mjs +24 -21
  179. package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.mjs.map +1 -1
  180. package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.native.js +43 -42
  181. package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.native.js.map +1 -1
  182. package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.mjs +5 -3
  183. package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.mjs.map +1 -1
  184. package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.native.js +5 -3
  185. package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.native.js.map +1 -1
  186. package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.mjs +5 -7
  187. package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.mjs.map +1 -1
  188. package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.native.js +5 -7
  189. package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.native.js.map +1 -1
  190. package/dist/esm/rn-commands/bundle/getBuildBundleFn.mjs +11 -14
  191. package/dist/esm/rn-commands/bundle/getBuildBundleFn.mjs.map +1 -1
  192. package/dist/esm/rn-commands/bundle/getBuildBundleFn.native.js +11 -14
  193. package/dist/esm/rn-commands/bundle/getBuildBundleFn.native.js.map +1 -1
  194. package/dist/esm/rn-commands/bundle/index.mjs +2 -2
  195. package/dist/esm/rn-commands/bundle/index.native.js +2 -2
  196. package/dist/esm/rn-commands/bundle/saveAssets.mjs +70 -70
  197. package/dist/esm/rn-commands/bundle/saveAssets.mjs.map +1 -1
  198. package/dist/esm/rn-commands/bundle/saveAssets.native.js +87 -89
  199. package/dist/esm/rn-commands/bundle/saveAssets.native.js.map +1 -1
  200. package/dist/esm/rn-commands/bundle/types.mjs +0 -2
  201. package/dist/esm/rn-commands/bundle/types.native.js +0 -2
  202. package/dist/esm/rn-commands/index.mjs +2 -2
  203. package/dist/esm/rn-commands/index.native.js +2 -2
  204. package/dist/esm/transformer/babel-core.mjs +2 -2
  205. package/dist/esm/transformer/babel-core.native.js +2 -2
  206. package/dist/esm/transformer/babel-transformer.mjs +108 -144
  207. package/dist/esm/transformer/babel-transformer.mjs.map +1 -1
  208. package/dist/esm/transformer/babel-transformer.native.js +114 -155
  209. package/dist/esm/transformer/babel-transformer.native.js.map +1 -1
  210. package/dist/esm/transformer/loadBabelConfig.mjs +29 -23
  211. package/dist/esm/transformer/loadBabelConfig.mjs.map +1 -1
  212. package/dist/esm/transformer/loadBabelConfig.native.js +33 -27
  213. package/dist/esm/transformer/loadBabelConfig.native.js.map +1 -1
  214. package/dist/esm/transformer/metroNativeWorker.mjs +1405 -1434
  215. package/dist/esm/transformer/metroNativeWorker.mjs.map +1 -1
  216. package/dist/esm/transformer/metroNativeWorker.native.js +2379 -2507
  217. package/dist/esm/transformer/metroNativeWorker.native.js.map +1 -1
  218. package/dist/esm/transformer/transformSync.mjs +32 -37
  219. package/dist/esm/transformer/transformSync.mjs.map +1 -1
  220. package/dist/esm/transformer/transformSync.native.js +34 -39
  221. package/dist/esm/transformer/transformSync.native.js.map +1 -1
  222. package/dist/esm/transformer/types.mjs +0 -2
  223. package/dist/esm/transformer/types.native.js +0 -2
  224. package/dist/esm/utils/exit.mjs +123 -112
  225. package/dist/esm/utils/exit.mjs.map +1 -1
  226. package/dist/esm/utils/exit.native.js +210 -215
  227. package/dist/esm/utils/exit.native.js.map +1 -1
  228. package/dist/esm/utils/getTerminalReporter.mjs +20 -21
  229. package/dist/esm/utils/getTerminalReporter.mjs.map +1 -1
  230. package/dist/esm/utils/getTerminalReporter.native.js +23 -24
  231. package/dist/esm/utils/getTerminalReporter.native.js.map +1 -1
  232. package/dist/esm/utils/metroCacheManager.mjs +73 -82
  233. package/dist/esm/utils/metroCacheManager.mjs.map +1 -1
  234. package/dist/esm/utils/metroCacheManager.native.js +91 -102
  235. package/dist/esm/utils/metroCacheManager.native.js.map +1 -1
  236. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs +11 -10
  237. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs.map +1 -1
  238. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +11 -10
  239. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +1 -1
  240. package/dist/esm/utils/projectImport.mjs +23 -25
  241. package/dist/esm/utils/projectImport.mjs.map +1 -1
  242. package/dist/esm/utils/projectImport.native.js +24 -33
  243. package/dist/esm/utils/projectImport.native.js.map +1 -1
  244. package/package.json +17 -18
  245. package/src/metro-config/getMetroConfigFromViteConfig.ts +46 -10
  246. package/src/transformer/loadBabelConfig.ts +2 -0
  247. package/src/transformer/metroNativeWorker.test.ts +267 -35
  248. package/src/transformer/metroNativeWorker.ts +3 -11
  249. package/types/babel-plugins/import-meta-env-plugin.d.ts.map +1 -1
  250. package/types/metro-config/getMetroConfigFromViteConfig.d.ts.map +1 -1
  251. package/types/rn-commands/bundle/assetPathUtils.d.ts.map +1 -1
  252. package/types/rn-commands/bundle/filterPlatformAssetScales.d.ts.map +1 -1
  253. package/types/rn-commands/bundle/getAssetDestPathAndroid.d.ts.map +1 -1
  254. package/types/rn-commands/bundle/getAssetDestPathIOS.d.ts.map +1 -1
  255. package/types/rn-commands/bundle/saveAssets.d.ts.map +1 -1
  256. package/types/transformer/loadBabelConfig.d.ts.map +1 -1
  257. package/types/transformer/metroNativeWorker.d.ts.map +1 -1
  258. package/dist/cjs/transformer/metroNativeWorker.test.cjs +0 -897
  259. package/dist/cjs/transformer/metroNativeWorker.test.native.js +0 -1010
  260. package/dist/cjs/transformer/metroNativeWorker.test.native.js.map +0 -1
  261. package/dist/cjs/transformer/transformSync.test.cjs +0 -36
  262. package/dist/cjs/transformer/transformSync.test.native.js +0 -49
  263. package/dist/cjs/transformer/transformSync.test.native.js.map +0 -1
  264. package/dist/esm/index.js.map +0 -1
  265. package/dist/esm/index.mjs.map +0 -1
  266. package/dist/esm/index.native.js.map +0 -1
  267. package/dist/esm/metro-config/types.mjs.map +0 -1
  268. package/dist/esm/metro-config/types.native.js.map +0 -1
  269. package/dist/esm/rn-commands/bundle/index.mjs.map +0 -1
  270. package/dist/esm/rn-commands/bundle/index.native.js.map +0 -1
  271. package/dist/esm/rn-commands/bundle/types.mjs.map +0 -1
  272. package/dist/esm/rn-commands/bundle/types.native.js.map +0 -1
  273. package/dist/esm/rn-commands/index.mjs.map +0 -1
  274. package/dist/esm/rn-commands/index.native.js.map +0 -1
  275. package/dist/esm/transformer/babel-core.mjs.map +0 -1
  276. package/dist/esm/transformer/babel-core.native.js.map +0 -1
  277. package/dist/esm/transformer/metroNativeWorker.test.mjs +0 -861
  278. package/dist/esm/transformer/metroNativeWorker.test.mjs.map +0 -1
  279. package/dist/esm/transformer/metroNativeWorker.test.native.js +0 -972
  280. package/dist/esm/transformer/metroNativeWorker.test.native.js.map +0 -1
  281. package/dist/esm/transformer/transformSync.test.mjs +0 -37
  282. package/dist/esm/transformer/transformSync.test.mjs.map +0 -1
  283. package/dist/esm/transformer/transformSync.test.native.js +0 -47
  284. package/dist/esm/transformer/transformSync.test.native.js.map +0 -1
  285. package/dist/esm/transformer/types.mjs.map +0 -1
  286. package/dist/esm/transformer/types.native.js.map +0 -1
  287. package/types/transformer/metroNativeWorker.test.d.ts +0 -2
  288. package/types/transformer/metroNativeWorker.test.d.ts.map +0 -1
  289. package/types/transformer/transformSync.test.d.ts +0 -2
  290. package/types/transformer/transformSync.test.d.ts.map +0 -1
@@ -1,42 +1,33 @@
1
1
  import { createDebugger } from "@vxrn/debug";
2
2
  import module from "module";
3
3
  import { pathToFileURL } from "url";
4
- function _instanceof(left, right) {
5
- if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
6
- return !!right[Symbol.hasInstance](left);
7
- } else {
8
- return left instanceof right;
9
- }
10
- }
11
- var {
12
- debug
13
- } = createDebugger("vite-metro:projectImport");
4
+
5
+ var { debug } = createDebugger("vite-metro:projectImport");
14
6
  async function projectImport(projectRoot, path) {
15
- try {
16
- var _out_default;
17
- var importPath = projectResolve(projectRoot, path);
18
- debug === null || debug === void 0 ? void 0 : debug(`Importing "${path}" from project root: "${projectRoot}" at "${importPath}"`);
19
- var out = await import(pathToFileURL(importPath).href);
20
- if (out === null || out === void 0 ? void 0 : (_out_default = out.default) === null || _out_default === void 0 ? void 0 : _out_default.default) {
21
- return {
22
- ...out,
23
- default: out.default.default
24
- };
25
- }
26
- return out;
27
- } catch (e) {
28
- if (_instanceof(e, Error)) {
29
- e.message = `[vite-plugin-metro] Failed to import ${path} from your project (${projectRoot}): ${e.message}`;
30
- }
31
- throw e;
32
- }
7
+ try {
8
+ var _out_default;
9
+ var importPath = projectResolve(projectRoot, path);
10
+ debug === null || debug === void 0 ? void 0 : debug(`Importing "${path}" from project root: "${projectRoot}" at "${importPath}"`);
11
+ var out = await import(pathToFileURL(importPath).href);
12
+ if (out === null || out === void 0 ? void 0 : (_out_default = out.default) === null || _out_default === void 0 ? void 0 : _out_default.default) {
13
+ return {
14
+ ...out,
15
+ default: out.default.default
16
+ };
17
+ }
18
+ return out;
19
+ } catch (e) {
20
+ if (e instanceof Error) {
21
+ e.message = `[vite-plugin-metro] Failed to import ${path} from your project (${projectRoot}): ${e.message}`;
22
+ }
23
+ throw e;
24
+ }
33
25
  }
34
26
  function projectResolve(projectRoot, path) {
35
- var require2 = module.createRequire(projectRoot);
36
- var importPath = require2.resolve(path, {
37
- paths: [projectRoot]
38
- });
39
- return importPath;
27
+ var require2 = module.createRequire(projectRoot);
28
+ var importPath = require2.resolve(path, { paths: [projectRoot] });
29
+ return importPath;
40
30
  }
31
+
41
32
  export { debug, projectImport, projectResolve };
42
33
  //# sourceMappingURL=projectImport.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createDebugger","module","pathToFileURL","_instanceof","left","right","Symbol","hasInstance","debug","projectImport","projectRoot","path","_out_default","importPath","projectResolve","out","href","default","e","Error","message"],"sources":["../../../src/utils/projectImport.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,cAAA,QAAsB;AAC/B,OAAOC,MAAA,MAAY;AACnB,SAASC,aAAA,QAAqB;AAEvB,SAAQC,WAAUA,CAAAC,IAAA,EAAAC,KAAA,EAAe;EAQxC,IAAAA,KAAA,IAAsB,eACpBC,MAAA,gBAEY,IAAAD,KAAA,CAAAC,MAAA,CAAAC,WAAA;IACZ,OAAI,EAAAF,KAAA,CAAAC,MAAA,CAAAC,WAAA,EAAAH,IAAA;EACF;IAEA,OAAAA,IAAQ,YAAcC,KAAI;EAE1B;AAGA;AACE;EAAAG;AAAA,CAAO,GAAAR,cAAA;AAAA,eACFS,cAAAC,WAAA,EAAAC,IAAA;EAAA;IACkB,IACvBC,YAAA;IACF,IAAAC,UAAA,GAAAC,cAAA,CAAAJ,WAAA,EAAAC,IAAA;IAEAH,KAAA,KAAO,QAAAA,KAAA,uBAAAA,KAAA,eAAAG,IAAA,yBAAAD,WAAA,SAAAG,UAAA;IACT,IAAAE,GAAS,GAAG,aAAAb,aAAA,CAAAW,UAAA,EAAAG,IAAA;IACV,IAAID,GAAA,aAAaA,GAAA,KAAO,mBAAAH,YAAA,GAAAG,GAAA,CAAAE,OAAA,cAAAL,YAAA,uBAAAA,YAAA,CAAAK,OAAA;MACtB,OAAE;QACJ,GAAAF,GAAA;QAEAE,OAAM,EAAAF,GAAA,CAAAE,OAAA,CAAAA;MACR;IACF;IAEO,OAASF,GAAA;EACd,SAAMG,CAAA;IACN,IAAMf,WAAA,CAAAe,CAAa,EAAAC,KAAA,GAAQ;MAC3BD,CAAA,CAAAE,OAAO,2CAAAT,IAAA,uBAAAD,WAAA,MAAAQ,CAAA,CAAAE,OAAA;IACT","ignoreList":[]}
1
+ {"version":3,"file":"projectImport.native.js","names":[],"sources":["esm/utils/projectImport.native.js"],"sourcesContent":["import { createDebugger } from \"@vxrn/debug\";\nimport module from \"module\";\nimport { pathToFileURL } from \"url\";\nvar { debug } = createDebugger(\"vite-metro:projectImport\");\nasync function projectImport(projectRoot, path) {\n try {\n var _out_default;\n var importPath = projectResolve(projectRoot, path);\n debug === null || debug === void 0 ? void 0 : debug(`Importing \"${path}\" from project root: \"${projectRoot}\" at \"${importPath}\"`);\n var out = await import(pathToFileURL(importPath).href);\n if (out === null || out === void 0 ? void 0 : (_out_default = out.default) === null || _out_default === void 0 ? void 0 : _out_default.default) {\n return {\n ...out,\n default: out.default.default\n };\n }\n return out;\n } catch (e) {\n if (e instanceof Error) {\n e.message = `[vite-plugin-metro] Failed to import ${path} from your project (${projectRoot}): ${e.message}`;\n }\n throw e;\n }\n}\nfunction projectResolve(projectRoot, path) {\n var require2 = module.createRequire(projectRoot);\n var importPath = require2.resolve(path, {\n paths: [\n projectRoot\n ]\n });\n return importPath;\n}\nexport {\n debug,\n projectImport,\n projectResolve\n};\n//# sourceMappingURL=projectImport.js.map\n"],"mappings":";;;;;AAGA,IAAI,EAAE,UAAU,eAAe,0BAA0B;AACzD,eAAe,cAAc,aAAa,MAAM;CAC9C,IAAI;EACF,IAAI;EACJ,IAAI,aAAa,eAAe,aAAa,IAAI;EACjD,UAAU,QAAQ,UAAU,KAAK,IAAI,KAAK,IAAI,MAAM,cAAc,KAAK,wBAAwB,YAAY,QAAQ,WAAW,EAAE;EAChI,IAAI,MAAM,MAAM,OAAO,cAAc,UAAU,CAAC,CAAC;EACjD,IAAI,QAAQ,QAAQ,QAAQ,KAAK,IAAI,KAAK,KAAK,eAAe,IAAI,aAAa,QAAQ,iBAAiB,KAAK,IAAI,KAAK,IAAI,aAAa,SAAS;GAC9I,OAAO;IACL,GAAG;IACH,SAAS,IAAI,QAAQ;GACvB;EACF;EACA,OAAO;CACT,SAAS,GAAG;EACV,IAAI,aAAa,OAAO;GACtB,EAAE,UAAU,wCAAwC,KAAK,sBAAsB,YAAY,KAAK,EAAE;EACpG;EACA,MAAM;CACR;AACF;AACA,SAAS,eAAe,aAAa,MAAM;CACzC,IAAI,WAAW,OAAO,cAAc,WAAW;CAC/C,IAAI,aAAa,SAAS,QAAQ,MAAM,EACtC,OAAO,CACL,WACF,EACF,CAAC;CACD,OAAO;AACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vxrn/vite-plugin-metro",
3
- "version": "2.0.0-beta.33.1",
3
+ "version": "2.0.0-beta.46.1",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "main": "dist/cjs",
@@ -61,11 +61,11 @@
61
61
  "typecheck": "tsc --noEmit"
62
62
  },
63
63
  "peerDependencies": {
64
- "@expo/metro-config": "~57.0.7",
65
- "expo": "~57.0.11",
66
- "metro": "^0.84.3",
67
- "metro-config": "^0.84.3",
68
- "react-native": "0.86.2",
64
+ "@expo/metro-config": "58.0.0-canary-20260909-ea7a89a",
65
+ "expo": "58.0.0-canary-20260909-ea7a89a",
66
+ "metro": "^0.87.0",
67
+ "metro-config": "^0.87.0",
68
+ "react-native": "0.87.1",
69
69
  "vite": "^8.2.2"
70
70
  },
71
71
  "dependencies": {
@@ -74,12 +74,11 @@
74
74
  "@jridgewell/remapping": "^2.3.0",
75
75
  "@jridgewell/trace-mapping": "^0.3.25",
76
76
  "@oxc-project/runtime": "^0.112.0",
77
- "@vxrn/compiler": "2.0.0-beta.33.1",
78
- "@vxrn/debug": "2.0.0-beta.33.1",
79
- "@vxrn/utils": "2.0.0-beta.33.1",
80
- "babel-preset-expo": "~57.0.5",
77
+ "@vxrn/compiler": "2.0.0-beta.46.1",
78
+ "@vxrn/debug": "2.0.0-beta.46.1",
79
+ "@vxrn/utils": "2.0.0-beta.46.1",
80
+ "babel-preset-expo": "58.0.0-canary-20260909-ea7a89a",
81
81
  "esbuild": "^0.25.12",
82
- "fast-flow-transform": "^0.0.3",
83
82
  "launch-editor": "^2.10.0",
84
83
  "magic-string": "^0.30.21",
85
84
  "micromatch": "^4.0.8",
@@ -89,16 +88,16 @@
89
88
  },
90
89
  "devDependencies": {
91
90
  "@biomejs/biome": "2.3.3",
92
- "@expo/metro-config": "~57.0.7",
93
- "@react-native/dev-middleware": "^0.86.2",
94
- "@tamagui/build": "2.6.2",
91
+ "@expo/metro-config": "58.0.0-canary-20260909-ea7a89a",
92
+ "@react-native/dev-middleware": "^0.87.1",
93
+ "@tamagui/build": "3.0.0-beta.1309.1",
95
94
  "@types/babel__helper-plugin-utils": "^7",
96
95
  "@types/node": "^24.10.0",
97
96
  "depcheck": "^1.4.7",
98
- "expo": "~57.0.11",
99
- "metro": "^0.84.3",
100
- "metro-config": "^0.84.3",
101
- "react-native": "0.86.2",
97
+ "expo": "58.0.0-canary-20260909-ea7a89a",
98
+ "metro": "^0.87.0",
99
+ "metro-config": "^0.87.0",
100
+ "react-native": "0.87.1",
102
101
  "vite": "^8.2.2",
103
102
  "vitest": "^4.1.0"
104
103
  },
@@ -9,6 +9,7 @@ import micromatch from 'micromatch'
9
9
  import type { loadConfig as loadConfigT } from 'metro'
10
10
  import type { getDefaultConfig as getDefaultConfigT } from '@expo/metro-config'
11
11
 
12
+ import { findUserBabelConfig } from '@vxrn/compiler'
12
13
  import { projectImport, projectResolve } from '../utils/projectImport'
13
14
  import { getTerminalReporter } from '../utils/getTerminalReporter'
14
15
  import { patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName } from '../utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName'
@@ -89,6 +90,47 @@ async function isWatchmanResponsive(projectRoot: string) {
89
90
  return probe
90
91
  }
91
92
 
93
+ /**
94
+ * Decides whether Metro runs the native worker or the babel transformer.
95
+ * No babel by default: the worker throws on a babel plugin it has no port
96
+ * for, so opting back in is explicit rather than something you drift into.
97
+ * When a user adds a custom babel config, respect it rather than forcing
98
+ * native transforms, unless explicitly overridden. Shared by both config
99
+ * builders so the two never drift apart.
100
+ */
101
+ function resolveNativeTransforms(
102
+ projectRoot: string,
103
+ metroPluginOptions: MetroPluginOptions
104
+ ): { isNativeTransforms: boolean; userBabelConfigPath: string | null } {
105
+ const userBabelConfigPath = projectRoot ? findUserBabelConfig(projectRoot) : null
106
+ const hasUserBabelConfig = Boolean(userBabelConfigPath)
107
+
108
+ const isNativeTransforms =
109
+ process.env.ONE_METRO_NATIVE_TRANSFORMS === '0'
110
+ ? false
111
+ : process.env.ONE_METRO_NATIVE_TRANSFORMS === '1'
112
+ ? true
113
+ : metroPluginOptions.nativeTransforms === false
114
+ ? false
115
+ : metroPluginOptions.nativeTransforms === true
116
+ ? true
117
+ : hasUserBabelConfig
118
+ ? false
119
+ : true
120
+
121
+ // the native worker runs no babel at all, so reaching it here means an
122
+ // explicit override is about to silently drop the user's plugins. name the
123
+ // ignored file rather than swallowing it.
124
+ if (userBabelConfigPath && isNativeTransforms) {
125
+ console.warn(
126
+ `[vxrn/metro] Ignoring user babel config at ${userBabelConfigPath} because native transforms are explicitly enabled (nativeTransforms: true or ONE_METRO_NATIVE_TRANSFORMS=1). ` +
127
+ `Port its plugins to nativeTransformModules, or set nativeTransforms: false (or ONE_METRO_NATIVE_TRANSFORMS=0) to use the babel transformer.`
128
+ )
129
+ }
130
+
131
+ return { isNativeTransforms, userBabelConfigPath }
132
+ }
133
+
92
134
  /**
93
135
  * Build the Metro config input WITHOUT calling Metro's `loadConfig`. Returns
94
136
  * the same shape Metro `loadConfig` expects as its second argument. Use this
@@ -176,11 +218,8 @@ export async function buildMetroConfigInputFromViteConfig(
176
218
 
177
219
  // no babel by default. the worker throws on a babel plugin it has no port
178
220
  // for, so opting back in is explicit rather than something you drift into.
179
- const isNativeTransforms =
180
- process.env.ONE_METRO_NATIVE_TRANSFORMS === '0'
181
- ? false
182
- : process.env.ONE_METRO_NATIVE_TRANSFORMS === '1' ||
183
- metroPluginOptions.nativeTransforms !== false
221
+ // When a user adds a custom babel config, respect it rather than forcing native transforms.
222
+ const { isNativeTransforms } = resolveNativeTransforms(projectRoot, metroPluginOptions)
184
223
 
185
224
  let nativeWorkerPath: string | undefined
186
225
  if (isNativeTransforms) {
@@ -343,11 +382,8 @@ export async function getMetroConfigFromViteConfig(
343
382
 
344
383
  // no babel by default. the worker throws on a babel plugin it has no port
345
384
  // for, so opting back in is explicit rather than something you drift into.
346
- const isNativeTransforms =
347
- process.env.ONE_METRO_NATIVE_TRANSFORMS === '0'
348
- ? false
349
- : process.env.ONE_METRO_NATIVE_TRANSFORMS === '1' ||
350
- metroPluginOptions.nativeTransforms !== false
385
+ // When a user adds a custom babel config, respect it rather than forcing native transforms.
386
+ const { isNativeTransforms } = resolveNativeTransforms(projectRoot, metroPluginOptions)
351
387
 
352
388
  let nativeWorkerPath: string | undefined
353
389
  if (isNativeTransforms) {
@@ -31,9 +31,11 @@ export const loadBabelConfig = (() => {
31
31
  const possibleBabelRCPaths = [
32
32
  '.babelrc',
33
33
  '.babelrc.js',
34
+ '.babelrc.json',
34
35
  'babel.config.js',
35
36
  'babel.config.cjs',
36
37
  'babel.config.mjs',
38
+ 'babel.config.json',
37
39
  ]
38
40
 
39
41
  const foundBabelRCPath = possibleBabelRCPaths.find((configFileName) =>
@@ -3,6 +3,7 @@ import * as babel from '@babel/core'
3
3
  import * as vm from 'node:vm'
4
4
  import { parseSync } from 'oxc-parser'
5
5
  import * as fs from 'node:fs'
6
+ import * as os from 'node:os'
6
7
  import * as path from 'node:path'
7
8
  import { createRequire } from 'node:module'
8
9
  import {
@@ -18,7 +19,10 @@ import {
18
19
  applyEnvironmentGuard,
19
20
  getRemoveServerCodeRouterRoot,
20
21
  } from './metroNativeWorker'
21
- import { buildMetroConfigInputFromViteConfig } from '../metro-config/getMetroConfigFromViteConfig'
22
+ import {
23
+ buildMetroConfigInputFromViteConfig,
24
+ getMetroConfigFromViteConfig,
25
+ } from '../metro-config/getMetroConfigFromViteConfig'
22
26
 
23
27
  const babelCalls = {
24
28
  transform: 0,
@@ -31,33 +35,25 @@ const babelCalls = {
31
35
 
32
36
  vi.mock('@babel/core', async (importOriginal) => {
33
37
  const actual = await importOriginal<typeof import('@babel/core')>()
34
- return {
35
- ...actual,
36
- transform: vi.fn((...args: any[]) => {
37
- babelCalls.transform++
38
- return (actual.transform as any)(...args)
39
- }),
40
- transformSync: vi.fn((...args: any[]) => {
41
- babelCalls.transformSync++
42
- return (actual.transformSync as any)(...args)
43
- }),
44
- transformAsync: vi.fn((...args: any[]) => {
45
- babelCalls.transformAsync++
46
- return (actual.transformAsync as any)(...args)
47
- }),
48
- transformFromAstSync: vi.fn((...args: any[]) => {
49
- babelCalls.transformFromAstSync++
50
- return (actual.transformFromAstSync as any)(...args)
51
- }),
52
- parse: vi.fn((...args: any[]) => {
53
- babelCalls.parse++
54
- return (actual.parse as any)(...args)
55
- }),
56
- parseSync: vi.fn((...args: any[]) => {
57
- babelCalls.parseSync++
58
- return (actual.parseSync as any)(...args)
59
- }),
60
- }
38
+ const names = [
39
+ 'transform',
40
+ 'transformSync',
41
+ 'transformAsync',
42
+ 'transformFromAstSync',
43
+ 'parse',
44
+ 'parseSync',
45
+ ] as const
46
+ const counted = Object.fromEntries(
47
+ names.map((name) => [
48
+ name,
49
+ vi.fn((...args: any[]) => {
50
+ babelCalls[name]++
51
+ return (actual[name] as any)(...args)
52
+ }),
53
+ ])
54
+ )
55
+ // @vxrn/compiler reaches babel through the default export, so count that too
56
+ return { ...actual, ...counted, default: { ...actual, ...counted } }
61
57
  })
62
58
 
63
59
  // module scope so every describe in this file can assert it, not just the first
@@ -70,6 +66,20 @@ beforeEach(() => {
70
66
  babelCalls.parseSync = 0
71
67
  })
72
68
 
69
+ // flow stripping is the one place the worker runs babel: react-native's flow
70
+ // syntax (readonly properties, enums) is beyond fast-flow-transform, so the
71
+ // hermes-parser pass in @vxrn/compiler strips it in a single transform call
72
+ function assertOnlyFlowStripBabelCall() {
73
+ expect(babelCalls).toEqual({
74
+ transform: 1,
75
+ transformSync: 0,
76
+ transformAsync: 0,
77
+ transformFromAstSync: 0,
78
+ parse: 0,
79
+ parseSync: 0,
80
+ })
81
+ }
82
+
73
83
  function assertZeroBabelCalls() {
74
84
  expect(babelCalls.transform).toBe(0)
75
85
  expect(babelCalls.transformSync).toBe(0)
@@ -236,7 +246,9 @@ describe('metroNativeWorker', () => {
236
246
  off.find((d) => d.name === 'react-native-worklets-core')!.data.isOptional
237
247
  ).toBeUndefined()
238
248
 
239
- const on = extractDependencies(code, 'setup.js', { allowOptionalDependencies: true })
249
+ const on = extractDependencies(code, 'setup.js', {
250
+ allowOptionalDependencies: true,
251
+ })
240
252
  expect(on.find((d) => d.name === 'react-native-worklets-core')!.data.isOptional).toBe(
241
253
  true
242
254
  )
@@ -399,7 +411,7 @@ describe('metroNativeWorker', () => {
399
411
  it('handles Asset files without Babel', async () => {
400
412
  const result = await transform(
401
413
  {
402
- assetRegistryPath: 'react-native/Libraries/Image/AssetRegistry',
414
+ assetRegistryPath: 'react-native/asset-registry',
403
415
  publicPath: '/assets',
404
416
  },
405
417
  '/project',
@@ -414,10 +426,10 @@ describe('metroNativeWorker', () => {
414
426
  expect(result.output[0].data.code).toContain('__d(function')
415
427
 
416
428
  const depNames = result.dependencies.map((d) => d.name)
417
- expect(depNames).toContain('react-native/Libraries/Image/AssetRegistry')
429
+ expect(depNames).toContain('react-native/asset-registry')
418
430
  })
419
431
 
420
- it('handles Flow files by stripping types without Babel', async () => {
432
+ it('strips Flow types with a single hermes-parser Babel pass', async () => {
421
433
  const flowSource = `
422
434
  // @flow
423
435
  function add(a: number, b: number): number {
@@ -434,11 +446,41 @@ describe('metroNativeWorker', () => {
434
446
  { dev: false, platform: 'ios', type: 'module' }
435
447
  )
436
448
 
437
- assertZeroBabelCalls()
449
+ assertOnlyFlowStripBabelCall()
438
450
  expect(result.output[0].data.code).not.toContain(': number')
439
451
  expect(result.output[0].data.code).toContain('function add(a, b)')
440
452
  })
441
453
 
454
+ it('lowers React Native Flow enums and readonly properties', async () => {
455
+ // react-native 0.87 ships VirtualView.js with exported Flow enums, and
456
+ // readonly object properties throughout its type declarations
457
+ const flowSource = `
458
+ // @flow strict-local
459
+ type Props = { readonly state: VirtualViewRenderState };
460
+ export enum VirtualViewRenderState {
461
+ Unknown = 0,
462
+ Rendered = 1,
463
+ None = 2,
464
+ }
465
+ export function isRendered(state: VirtualViewRenderState): boolean {
466
+ return state === VirtualViewRenderState.Rendered;
467
+ }
468
+ `
469
+
470
+ const result = await transform(
471
+ {},
472
+ '/project',
473
+ 'node_modules/react-native/src/private/components/virtualview/VirtualView.js',
474
+ Buffer.from(flowSource, 'utf8'),
475
+ { dev: false, platform: 'ios', type: 'module' }
476
+ )
477
+
478
+ assertOnlyFlowStripBabelCall()
479
+ expect(result.output[0].data.code).not.toContain('enum VirtualViewRenderState')
480
+ expect(result.output[0].data.code).not.toContain('readonly')
481
+ expect(result.dependencies.map((d) => d.name)).toContain('flow-enums-runtime')
482
+ })
483
+
442
484
  it('generates a deterministic cache key without Babel', () => {
443
485
  const key1 = getCacheKey(
444
486
  { globalPrefix: '__one_', minifierPath: 'terser' },
@@ -515,6 +557,151 @@ describe('metroNativeWorker', () => {
515
557
  )
516
558
  })
517
559
 
560
+ it('falls back to default Metro babel transformer when a user babel config exists', async () => {
561
+ const tempDir = path.join(process.cwd(), `.tmp-metro-test-${Date.now()}`)
562
+ fs.mkdirSync(tempDir, { recursive: true })
563
+ fs.writeFileSync(path.join(tempDir, 'package.json'), '{}')
564
+ try {
565
+ const mockViteConfig = { root: tempDir } as any
566
+ delete process.env.ONE_METRO_NATIVE_TRANSFORMS
567
+
568
+ // With no config, defaults to metroNativeWorker
569
+ const config1 = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
570
+ expect(config1.defaultConfig.transformerPath).toContain('metroNativeWorker')
571
+
572
+ // a config written by `one patch` is ignored, still uses metroNativeWorker
573
+ const babelConfigPath = path.join(tempDir, 'babel.config.js')
574
+ fs.writeFileSync(
575
+ babelConfigPath,
576
+ '// @one/generated bundler-config\nmodule.exports = {}'
577
+ )
578
+ const config2 = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
579
+ expect(config2.defaultConfig.transformerPath).toContain('metroNativeWorker')
580
+
581
+ // User config: falls back to metro default transformer (not metroNativeWorker)
582
+ fs.writeFileSync(babelConfigPath, 'module.exports = { plugins: ["my-plugin"] }')
583
+ const config3 = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
584
+ expect(config3.defaultConfig.transformerPath).not.toContain('metroNativeWorker')
585
+
586
+ // Explicit env var ONE_METRO_NATIVE_TRANSFORMS=1 forces native worker even with user babel config
587
+ process.env.ONE_METRO_NATIVE_TRANSFORMS = '1'
588
+ const config4 = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
589
+ expect(config4.defaultConfig.transformerPath).toContain('metroNativeWorker')
590
+ delete process.env.ONE_METRO_NATIVE_TRANSFORMS
591
+
592
+ // Explicit nativeTransforms: true also forces native worker
593
+ const config5 = await buildMetroConfigInputFromViteConfig(mockViteConfig, {
594
+ nativeTransforms: true,
595
+ })
596
+ expect(config5.defaultConfig.transformerPath).toContain('metroNativeWorker')
597
+ } finally {
598
+ delete process.env.ONE_METRO_NATIVE_TRANSFORMS
599
+ fs.rmSync(tempDir, { recursive: true, force: true })
600
+ }
601
+ })
602
+
603
+ it('warns naming the ignored user babel config when native transforms are forced', async () => {
604
+ const tempDir = fs.realpathSync(
605
+ fs.mkdtempSync(path.join(process.cwd(), '.tmp-metro-test-'))
606
+ )
607
+ fs.writeFileSync(path.join(tempDir, 'package.json'), '{}')
608
+ const babelConfigPath = path.join(tempDir, 'babel.config.js')
609
+ fs.writeFileSync(babelConfigPath, 'module.exports = { plugins: [] }')
610
+ try {
611
+ delete process.env.ONE_METRO_NATIVE_TRANSFORMS
612
+ const mockViteConfig = { root: tempDir } as any
613
+ const warnsWithConfig = (spy: any) =>
614
+ spy.mock.calls.some((args: any[]) => args.join(' ').includes(babelConfigPath))
615
+
616
+ // explicit option force still uses the worker, but names the dropped config
617
+ const optionWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
618
+ try {
619
+ const forced = await buildMetroConfigInputFromViteConfig(mockViteConfig, {
620
+ nativeTransforms: true,
621
+ })
622
+ expect(forced.defaultConfig.transformerPath).toContain('metroNativeWorker')
623
+ expect(warnsWithConfig(optionWarn)).toBe(true)
624
+ } finally {
625
+ optionWarn.mockRestore()
626
+ }
627
+
628
+ // env var force warns the same way
629
+ const envWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
630
+ try {
631
+ process.env.ONE_METRO_NATIVE_TRANSFORMS = '1'
632
+ const envForced = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
633
+ expect(envForced.defaultConfig.transformerPath).toContain('metroNativeWorker')
634
+ expect(warnsWithConfig(envWarn)).toBe(true)
635
+ } finally {
636
+ envWarn.mockRestore()
637
+ delete process.env.ONE_METRO_NATIVE_TRANSFORMS
638
+ }
639
+
640
+ // default (no force) respects the config silently: babel fallback, no warning
641
+ const respectedWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
642
+ try {
643
+ const respected = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
644
+ expect(respected.defaultConfig.transformerPath).not.toContain('metroNativeWorker')
645
+ expect(warnsWithConfig(respectedWarn)).toBe(false)
646
+ } finally {
647
+ respectedWarn.mockRestore()
648
+ }
649
+ } finally {
650
+ delete process.env.ONE_METRO_NATIVE_TRANSFORMS
651
+ fs.rmSync(tempDir, { recursive: true, force: true })
652
+ }
653
+ })
654
+
655
+ it('selects the same transformer in both metro config builders', async () => {
656
+ const tempDir = fs.realpathSync(
657
+ fs.mkdtempSync(path.join(process.cwd(), '.tmp-metro-test-'))
658
+ )
659
+ fs.writeFileSync(path.join(tempDir, 'package.json'), '{}')
660
+ try {
661
+ delete process.env.ONE_METRO_NATIVE_TRANSFORMS
662
+ const mockViteConfig = { root: tempDir } as any
663
+
664
+ // no user config: both builders default to the native worker
665
+ const nativeInput = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
666
+ const nativeFull = await getMetroConfigFromViteConfig(mockViteConfig, {})
667
+ expect(nativeInput.defaultConfig.transformerPath).toContain('metroNativeWorker')
668
+ expect((nativeFull as any).transformerPath).toContain('metroNativeWorker')
669
+
670
+ // user config: both builders fall back to the babel transformer
671
+ const babelConfigPath = path.join(tempDir, 'babel.config.js')
672
+ fs.writeFileSync(babelConfigPath, 'module.exports = { plugins: [] }')
673
+ const fallbackInput = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
674
+ const fallbackFull = await getMetroConfigFromViteConfig(mockViteConfig, {})
675
+ expect(fallbackInput.defaultConfig.transformerPath).not.toContain(
676
+ 'metroNativeWorker'
677
+ )
678
+ expect((fallbackFull as any).transformerPath).not.toContain('metroNativeWorker')
679
+
680
+ // forced with a user config: both builders warn naming the ignored file
681
+ const forcedWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
682
+ try {
683
+ const forcedInput = await buildMetroConfigInputFromViteConfig(mockViteConfig, {
684
+ nativeTransforms: true,
685
+ })
686
+ const forcedFull = await getMetroConfigFromViteConfig(mockViteConfig, {
687
+ nativeTransforms: true,
688
+ })
689
+ expect(forcedInput.defaultConfig.transformerPath).toContain('metroNativeWorker')
690
+ expect((forcedFull as any).transformerPath).toContain('metroNativeWorker')
691
+ expect(
692
+ forcedWarn.mock.calls.some((args: any[]) =>
693
+ args.join(' ').includes(babelConfigPath)
694
+ )
695
+ ).toBe(true)
696
+ } finally {
697
+ forcedWarn.mockRestore()
698
+ }
699
+ } finally {
700
+ delete process.env.ONE_METRO_NATIVE_TRANSFORMS
701
+ fs.rmSync(tempDir, { recursive: true, force: true })
702
+ }
703
+ })
704
+
518
705
  it('transforms and executes a real 2-module Metro bundle through metro-runtime require polyfill', async () => {
519
706
  // Probe 1 verification:
520
707
  // Module 2 (dep.js): exports a value
@@ -1130,7 +1317,11 @@ describe('one native transform ports', () => {
1130
1317
  it('inlines import.meta.env reads, which oxc otherwise lowers to an empty object', () => {
1131
1318
  // oxc's CJS lowering emits `var import_meta = {}`, so an untouched
1132
1319
  // `import.meta.env.X` silently reads undefined in every native bundle.
1133
- const env = { DEV: false, VITE_POSTHOG_API_KEY: 'pk_live', TAMAGUI_TARGET: 'native' }
1320
+ const env = {
1321
+ DEV: false,
1322
+ VITE_POSTHOG_API_KEY: 'pk_live',
1323
+ TAMAGUI_TARGET: 'native',
1324
+ }
1134
1325
  const out = applyInlineEnvVars(
1135
1326
  `export const key = import.meta.env.VITE_POSTHOG_API_KEY;
1136
1327
  export const target = import.meta.env?.TAMAGUI_TARGET;
@@ -1225,7 +1416,9 @@ export const all = { ...import.meta.env };`,
1225
1416
  // takeout adds `hot-updater/babel-plugin` for OTA; dropping it silently
1226
1417
  // would ship a build whose updates never apply.
1227
1418
  const withPlugins = (plugins: any[]) =>
1228
- ({ customTransformOptions: { vite: { babelConfig: { plugins } } } }) as any
1419
+ ({
1420
+ customTransformOptions: { vite: { babelConfig: { plugins } } },
1421
+ }) as any
1229
1422
 
1230
1423
  expect(() =>
1231
1424
  assertNoUnportedBabelPlugins(
@@ -1284,3 +1477,42 @@ export const all = { ...import.meta.env };`,
1284
1477
  )
1285
1478
  })
1286
1479
  })
1480
+
1481
+ describe('metro babel fallback config names', () => {
1482
+ it('extends json babel configs just like the compiler detection does', async () => {
1483
+ // loadBabelConfig memoizes a singleton, so each case gets a fresh module
1484
+ for (const name of ['babel.config.json', '.babelrc.json']) {
1485
+ vi.resetModules()
1486
+ const { loadBabelConfig } = await import('./loadBabelConfig')
1487
+ const tempDir = fs.realpathSync(
1488
+ fs.mkdtempSync(path.join(os.tmpdir(), 'vxrn-babel-json-'))
1489
+ )
1490
+ try {
1491
+ fs.writeFileSync(path.join(tempDir, name), JSON.stringify({ plugins: [] }))
1492
+ expect(loadBabelConfig({ projectRoot: tempDir })).toEqual({
1493
+ extends: path.join(tempDir, name),
1494
+ })
1495
+ } finally {
1496
+ fs.rmSync(tempDir, { recursive: true, force: true })
1497
+ }
1498
+ }
1499
+
1500
+ // control: js configs keep loading
1501
+ vi.resetModules()
1502
+ const { loadBabelConfig } = await import('./loadBabelConfig')
1503
+ const tempDir = fs.realpathSync(
1504
+ fs.mkdtempSync(path.join(os.tmpdir(), 'vxrn-babel-json-'))
1505
+ )
1506
+ try {
1507
+ fs.writeFileSync(
1508
+ path.join(tempDir, 'babel.config.js'),
1509
+ 'module.exports = { plugins: [] }'
1510
+ )
1511
+ expect(loadBabelConfig({ projectRoot: tempDir })).toEqual({
1512
+ extends: path.join(tempDir, 'babel.config.js'),
1513
+ })
1514
+ } finally {
1515
+ fs.rmSync(tempDir, { recursive: true, force: true })
1516
+ }
1517
+ })
1518
+ })
@@ -8,6 +8,7 @@ import remapping from '@jridgewell/remapping'
8
8
  import { TraceMap, eachMapping } from '@jridgewell/trace-mapping'
9
9
  import {
10
10
  shouldStripFlow,
11
+ stripFlowTypes,
11
12
  transformHermesAsync,
12
13
  transformHermesLoops,
13
14
  transformReactNativeCodegen,
@@ -1986,8 +1987,7 @@ export const env = !dotEnvModules.keys().length ? process.env : { ...process.env
1986
1987
 
1987
1988
  // 2. Asset files
1988
1989
  if (options.type === 'asset') {
1989
- const assetRegistryPath =
1990
- config.assetRegistryPath || 'react-native/Libraries/Image/AssetRegistry'
1990
+ const assetRegistryPath = config.assetRegistryPath || 'react-native/asset-registry'
1991
1991
  let properDescriptor: any = null
1992
1992
 
1993
1993
  const absolutePath = path.resolve(projectRoot, filename)
@@ -2144,15 +2144,7 @@ export const env = !dotEnvModules.keys().length ? process.env : { ...process.env
2144
2144
  // Step A: Flow stripping
2145
2145
  if (shouldStripFlow(filename, code)) {
2146
2146
  try {
2147
- const fft = await import('fast-flow-transform')
2148
- const flowTransform = fft.default || fft
2149
- const flowResult = await flowTransform({
2150
- filename,
2151
- source: code,
2152
- sourcemap: true,
2153
- dialect: 'flow',
2154
- format: 'pretty',
2155
- })
2147
+ const flowResult = await stripFlowTypes(filename, code)
2156
2148
  if (flowResult?.code) {
2157
2149
  code = flowResult.code
2158
2150
  if (flowResult.map) {