@vxrn/vite-plugin-metro 1.27.1 → 2.0.0-beta.101.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 (335) 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 +57 -57
  6. package/dist/cjs/env/platformEnv.native.cjs +95 -0
  7. package/dist/cjs/env/platformEnv.native.js +74 -75
  8. package/dist/cjs/env/platformEnv.native.js.map +1 -1
  9. package/dist/cjs/index.cjs +21 -25
  10. package/dist/cjs/index.native.cjs +39 -0
  11. package/dist/cjs/index.native.js +21 -24
  12. package/dist/cjs/index.native.js.map +1 -1
  13. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.cjs +54 -51
  14. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.cjs +108 -0
  15. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js +95 -94
  16. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +1 -1
  17. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.cjs +287 -272
  18. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.cjs +346 -0
  19. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js +309 -282
  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/metroPlugin.cjs +210 -248
  30. package/dist/cjs/plugins/metroPlugin.native.cjs +242 -0
  31. package/dist/cjs/plugins/metroPlugin.native.js +216 -253
  32. package/dist/cjs/plugins/metroPlugin.native.js.map +1 -1
  33. package/dist/cjs/rn-commands/bundle/assetCatalogIOS.cjs +56 -65
  34. package/dist/cjs/rn-commands/bundle/assetCatalogIOS.native.cjs +121 -0
  35. package/dist/cjs/rn-commands/bundle/assetCatalogIOS.native.js +94 -106
  36. package/dist/cjs/rn-commands/bundle/assetCatalogIOS.native.js.map +1 -1
  37. package/dist/cjs/rn-commands/bundle/assetPathUtils.cjs +51 -55
  38. package/dist/cjs/rn-commands/bundle/assetPathUtils.native.cjs +72 -0
  39. package/dist/cjs/rn-commands/bundle/assetPathUtils.native.js +51 -54
  40. package/dist/cjs/rn-commands/bundle/assetPathUtils.native.js.map +1 -1
  41. package/dist/cjs/rn-commands/bundle/buildBundle.cjs +37 -46
  42. package/dist/cjs/rn-commands/bundle/buildBundle.native.cjs +57 -0
  43. package/dist/cjs/rn-commands/bundle/buildBundle.native.js +39 -47
  44. package/dist/cjs/rn-commands/bundle/buildBundle.native.js.map +1 -1
  45. package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.cjs +57 -68
  46. package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.native.cjs +81 -0
  47. package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.native.js +59 -70
  48. package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.native.js.map +1 -1
  49. package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.cjs +37 -39
  50. package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.native.cjs +70 -0
  51. package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.native.js +56 -59
  52. package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.native.js.map +1 -1
  53. package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.cjs +20 -29
  54. package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.native.cjs +39 -0
  55. package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.native.js +20 -28
  56. package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.native.js.map +1 -1
  57. package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.cjs +20 -33
  58. package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.native.cjs +38 -0
  59. package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.native.js +20 -32
  60. package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.native.js.map +1 -1
  61. package/dist/cjs/rn-commands/bundle/getBuildBundleFn.cjs +23 -32
  62. package/dist/cjs/rn-commands/bundle/getBuildBundleFn.native.cjs +38 -0
  63. package/dist/cjs/rn-commands/bundle/getBuildBundleFn.native.js +23 -31
  64. package/dist/cjs/rn-commands/bundle/getBuildBundleFn.native.js.map +1 -1
  65. package/dist/cjs/rn-commands/bundle/index.cjs +15 -17
  66. package/dist/cjs/rn-commands/bundle/index.native.cjs +30 -0
  67. package/dist/cjs/rn-commands/bundle/index.native.js +15 -16
  68. package/dist/cjs/rn-commands/bundle/index.native.js.map +1 -1
  69. package/dist/cjs/rn-commands/bundle/saveAssets.cjs +85 -96
  70. package/dist/cjs/rn-commands/bundle/saveAssets.native.cjs +129 -0
  71. package/dist/cjs/rn-commands/bundle/saveAssets.native.js +102 -114
  72. package/dist/cjs/rn-commands/bundle/saveAssets.native.js.map +1 -1
  73. package/dist/cjs/rn-commands/bundle/types.cjs +9 -11
  74. package/dist/cjs/rn-commands/bundle/types.native.cjs +18 -0
  75. package/dist/cjs/rn-commands/bundle/types.native.js +9 -10
  76. package/dist/cjs/rn-commands/bundle/types.native.js.map +1 -1
  77. package/dist/cjs/rn-commands/index.cjs +17 -26
  78. package/dist/cjs/rn-commands/index.native.cjs +32 -0
  79. package/dist/cjs/rn-commands/index.native.js +17 -25
  80. package/dist/cjs/rn-commands/index.native.js.map +1 -1
  81. package/dist/cjs/transformer/babel-core.cjs +16 -18
  82. package/dist/cjs/transformer/babel-core.native.cjs +30 -0
  83. package/dist/cjs/transformer/babel-core.native.js +16 -17
  84. package/dist/cjs/transformer/babel-core.native.js.map +1 -1
  85. package/dist/cjs/transformer/babel-transformer.cjs +149 -151
  86. package/dist/cjs/transformer/babel-transformer.native.cjs +190 -0
  87. package/dist/cjs/transformer/babel-transformer.native.js +164 -158
  88. package/dist/cjs/transformer/babel-transformer.native.js.map +1 -1
  89. package/dist/cjs/transformer/expoVirtualEnv.cjs +92 -0
  90. package/dist/cjs/transformer/expoVirtualEnv.native.cjs +113 -0
  91. package/dist/cjs/transformer/expoVirtualEnv.native.js +115 -0
  92. package/dist/cjs/transformer/expoVirtualEnv.native.js.map +1 -0
  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 +1430 -1488
  98. package/dist/cjs/transformer/metroNativeWorker.native.cjs +2519 -0
  99. package/dist/cjs/transformer/metroNativeWorker.native.js +2407 -2560
  100. package/dist/cjs/transformer/metroNativeWorker.native.js.map +1 -1
  101. package/dist/cjs/transformer/transformSync.cjs +48 -64
  102. package/dist/cjs/transformer/transformSync.native.cjs +74 -0
  103. package/dist/cjs/transformer/transformSync.native.js +50 -65
  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/projectImport.cjs +40 -51
  122. package/dist/cjs/utils/projectImport.native.cjs +64 -0
  123. package/dist/cjs/utils/projectImport.native.js +41 -58
  124. package/dist/cjs/utils/projectImport.native.js.map +1 -1
  125. package/dist/esm/babel-plugins/import-meta-env-plugin.mjs +72 -86
  126. package/dist/esm/babel-plugins/import-meta-env-plugin.mjs.map +1 -1
  127. package/dist/esm/babel-plugins/import-meta-env-plugin.native.js +78 -92
  128. package/dist/esm/babel-plugins/import-meta-env-plugin.native.js.map +1 -1
  129. package/dist/esm/env/platformEnv.mjs +42 -39
  130. package/dist/esm/env/platformEnv.mjs.map +1 -1
  131. package/dist/esm/env/platformEnv.native.js +59 -58
  132. package/dist/esm/env/platformEnv.native.js.map +1 -1
  133. package/dist/esm/index.js +3 -4
  134. package/dist/esm/index.mjs +3 -4
  135. package/dist/esm/index.native.js +3 -4
  136. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs +42 -33
  137. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs.map +1 -1
  138. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js +83 -77
  139. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +1 -1
  140. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs +271 -247
  141. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs.map +1 -1
  142. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js +293 -258
  143. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
  144. package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.mjs +26 -26
  145. package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.mjs.map +1 -1
  146. package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js +27 -27
  147. package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js.map +1 -1
  148. package/dist/esm/metro-config/types.mjs +0 -2
  149. package/dist/esm/metro-config/types.native.js +0 -2
  150. package/dist/esm/plugins/metroPlugin.mjs +195 -222
  151. package/dist/esm/plugins/metroPlugin.mjs.map +1 -1
  152. package/dist/esm/plugins/metroPlugin.native.js +201 -228
  153. package/dist/esm/plugins/metroPlugin.native.js.map +1 -1
  154. package/dist/esm/rn-commands/bundle/assetCatalogIOS.mjs +38 -38
  155. package/dist/esm/rn-commands/bundle/assetCatalogIOS.mjs.map +1 -1
  156. package/dist/esm/rn-commands/bundle/assetCatalogIOS.native.js +76 -80
  157. package/dist/esm/rn-commands/bundle/assetCatalogIOS.native.js.map +1 -1
  158. package/dist/esm/rn-commands/bundle/assetPathUtils.mjs +38 -37
  159. package/dist/esm/rn-commands/bundle/assetPathUtils.mjs.map +1 -1
  160. package/dist/esm/rn-commands/bundle/assetPathUtils.native.js +38 -37
  161. package/dist/esm/rn-commands/bundle/assetPathUtils.native.js.map +1 -1
  162. package/dist/esm/rn-commands/bundle/buildBundle.mjs +25 -28
  163. package/dist/esm/rn-commands/bundle/buildBundle.mjs.map +1 -1
  164. package/dist/esm/rn-commands/bundle/buildBundle.native.js +27 -30
  165. package/dist/esm/rn-commands/bundle/buildBundle.native.js.map +1 -1
  166. package/dist/esm/rn-commands/bundle/buildBundleWithConfig.mjs +43 -43
  167. package/dist/esm/rn-commands/bundle/buildBundleWithConfig.mjs.map +1 -1
  168. package/dist/esm/rn-commands/bundle/buildBundleWithConfig.native.js +45 -46
  169. package/dist/esm/rn-commands/bundle/buildBundleWithConfig.native.js.map +1 -1
  170. package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.mjs +24 -21
  171. package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.mjs.map +1 -1
  172. package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.native.js +43 -42
  173. package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.native.js.map +1 -1
  174. package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.mjs +5 -3
  175. package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.mjs.map +1 -1
  176. package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.native.js +5 -3
  177. package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.native.js.map +1 -1
  178. package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.mjs +5 -7
  179. package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.mjs.map +1 -1
  180. package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.native.js +5 -7
  181. package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.native.js.map +1 -1
  182. package/dist/esm/rn-commands/bundle/getBuildBundleFn.mjs +11 -14
  183. package/dist/esm/rn-commands/bundle/getBuildBundleFn.mjs.map +1 -1
  184. package/dist/esm/rn-commands/bundle/getBuildBundleFn.native.js +11 -14
  185. package/dist/esm/rn-commands/bundle/getBuildBundleFn.native.js.map +1 -1
  186. package/dist/esm/rn-commands/bundle/index.mjs +2 -2
  187. package/dist/esm/rn-commands/bundle/index.native.js +2 -2
  188. package/dist/esm/rn-commands/bundle/saveAssets.mjs +70 -70
  189. package/dist/esm/rn-commands/bundle/saveAssets.mjs.map +1 -1
  190. package/dist/esm/rn-commands/bundle/saveAssets.native.js +87 -89
  191. package/dist/esm/rn-commands/bundle/saveAssets.native.js.map +1 -1
  192. package/dist/esm/rn-commands/bundle/types.mjs +0 -2
  193. package/dist/esm/rn-commands/bundle/types.native.js +0 -2
  194. package/dist/esm/rn-commands/index.mjs +2 -2
  195. package/dist/esm/rn-commands/index.native.js +2 -2
  196. package/dist/esm/transformer/babel-core.mjs +2 -2
  197. package/dist/esm/transformer/babel-core.native.js +2 -2
  198. package/dist/esm/transformer/babel-transformer.mjs +133 -132
  199. package/dist/esm/transformer/babel-transformer.mjs.map +1 -1
  200. package/dist/esm/transformer/babel-transformer.native.js +145 -142
  201. package/dist/esm/transformer/babel-transformer.native.js.map +1 -1
  202. package/dist/esm/transformer/expoVirtualEnv.mjs +67 -0
  203. package/dist/esm/transformer/expoVirtualEnv.mjs.map +1 -0
  204. package/dist/esm/transformer/expoVirtualEnv.native.js +86 -0
  205. package/dist/esm/transformer/expoVirtualEnv.native.js.map +1 -0
  206. package/dist/esm/transformer/loadBabelConfig.mjs +29 -23
  207. package/dist/esm/transformer/loadBabelConfig.mjs.map +1 -1
  208. package/dist/esm/transformer/loadBabelConfig.native.js +33 -27
  209. package/dist/esm/transformer/loadBabelConfig.native.js.map +1 -1
  210. package/dist/esm/transformer/metroNativeWorker.mjs +1393 -1442
  211. package/dist/esm/transformer/metroNativeWorker.mjs.map +1 -1
  212. package/dist/esm/transformer/metroNativeWorker.native.js +2370 -2515
  213. package/dist/esm/transformer/metroNativeWorker.native.js.map +1 -1
  214. package/dist/esm/transformer/transformSync.mjs +33 -38
  215. package/dist/esm/transformer/transformSync.mjs.map +1 -1
  216. package/dist/esm/transformer/transformSync.native.js +35 -40
  217. package/dist/esm/transformer/transformSync.native.js.map +1 -1
  218. package/dist/esm/transformer/types.mjs +0 -2
  219. package/dist/esm/transformer/types.native.js +0 -2
  220. package/dist/esm/utils/exit.mjs +123 -112
  221. package/dist/esm/utils/exit.mjs.map +1 -1
  222. package/dist/esm/utils/exit.native.js +210 -215
  223. package/dist/esm/utils/exit.native.js.map +1 -1
  224. package/dist/esm/utils/getTerminalReporter.mjs +20 -21
  225. package/dist/esm/utils/getTerminalReporter.mjs.map +1 -1
  226. package/dist/esm/utils/getTerminalReporter.native.js +23 -24
  227. package/dist/esm/utils/getTerminalReporter.native.js.map +1 -1
  228. package/dist/esm/utils/metroCacheManager.mjs +73 -82
  229. package/dist/esm/utils/metroCacheManager.mjs.map +1 -1
  230. package/dist/esm/utils/metroCacheManager.native.js +91 -102
  231. package/dist/esm/utils/metroCacheManager.native.js.map +1 -1
  232. package/dist/esm/utils/projectImport.mjs +23 -25
  233. package/dist/esm/utils/projectImport.mjs.map +1 -1
  234. package/dist/esm/utils/projectImport.native.js +24 -33
  235. package/dist/esm/utils/projectImport.native.js.map +1 -1
  236. package/package.json +15 -18
  237. package/src/babel-plugins/import-meta-env-plugin.ts +1 -1
  238. package/src/env/platformEnv.test.ts +44 -0
  239. package/src/env/platformEnv.ts +6 -3
  240. package/src/index.ts +0 -2
  241. package/src/metro-config/getMetroBabelConfigFromViteConfig.test.ts +52 -0
  242. package/src/metro-config/getMetroBabelConfigFromViteConfig.ts +8 -7
  243. package/src/metro-config/getMetroConfigFromViteConfig.test.ts +60 -0
  244. package/src/metro-config/getMetroConfigFromViteConfig.ts +150 -113
  245. package/src/plugins/metroPlugin.ts +3 -6
  246. package/src/transformer/babel-transformer.test.ts +118 -0
  247. package/src/transformer/babel-transformer.ts +82 -15
  248. package/src/transformer/expoVirtualEnv.integration.test.ts +106 -0
  249. package/src/transformer/expoVirtualEnv.test.ts +72 -0
  250. package/src/transformer/expoVirtualEnv.ts +115 -0
  251. package/src/transformer/loadBabelConfig.ts +1 -1
  252. package/src/transformer/metroNativeWorker.test.ts +268 -50
  253. package/src/transformer/metroNativeWorker.ts +53 -71
  254. package/src/transformer/transformSync.test.ts +22 -0
  255. package/src/transformer/transformSync.ts +4 -4
  256. package/src/utils/exit.ts +2 -2
  257. package/src/utils/getTerminalReporter.ts +1 -1
  258. package/src/utils/projectImport.ts +2 -2
  259. package/types/babel-plugins/import-meta-env-plugin.d.ts +1 -1
  260. package/types/babel-plugins/import-meta-env-plugin.d.ts.map +1 -1
  261. package/types/env/platformEnv.d.ts +2 -1
  262. package/types/env/platformEnv.d.ts.map +1 -1
  263. package/types/index.d.ts +0 -2
  264. package/types/index.d.ts.map +1 -1
  265. package/types/metro-config/getMetroBabelConfigFromViteConfig.d.ts +1 -1
  266. package/types/metro-config/getMetroBabelConfigFromViteConfig.d.ts.map +1 -1
  267. package/types/metro-config/getMetroConfigFromViteConfig.d.ts +2 -2
  268. package/types/metro-config/getMetroConfigFromViteConfig.d.ts.map +1 -1
  269. package/types/plugins/metroPlugin.d.ts +2 -4
  270. package/types/plugins/metroPlugin.d.ts.map +1 -1
  271. package/types/rn-commands/bundle/assetPathUtils.d.ts.map +1 -1
  272. package/types/rn-commands/bundle/filterPlatformAssetScales.d.ts.map +1 -1
  273. package/types/rn-commands/bundle/getAssetDestPathAndroid.d.ts.map +1 -1
  274. package/types/rn-commands/bundle/getAssetDestPathIOS.d.ts.map +1 -1
  275. package/types/rn-commands/bundle/saveAssets.d.ts.map +1 -1
  276. package/types/transformer/babel-transformer.d.ts +10 -1
  277. package/types/transformer/babel-transformer.d.ts.map +1 -1
  278. package/types/transformer/expoVirtualEnv.d.ts +8 -0
  279. package/types/transformer/expoVirtualEnv.d.ts.map +1 -0
  280. package/types/transformer/metroNativeWorker.d.ts +7 -8
  281. package/types/transformer/metroNativeWorker.d.ts.map +1 -1
  282. package/types/utils/projectImport.d.ts +2 -2
  283. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.cjs +0 -71
  284. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js +0 -82
  285. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js.map +0 -1
  286. package/dist/cjs/transformer/metroNativeWorker.test.cjs +0 -1054
  287. package/dist/cjs/transformer/metroNativeWorker.test.native.js +0 -1170
  288. package/dist/cjs/transformer/metroNativeWorker.test.native.js.map +0 -1
  289. package/dist/cjs/transformer/transformSync.test.cjs +0 -36
  290. package/dist/cjs/transformer/transformSync.test.native.js +0 -49
  291. package/dist/cjs/transformer/transformSync.test.native.js.map +0 -1
  292. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.cjs +0 -39
  293. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +0 -42
  294. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +0 -1
  295. package/dist/esm/index.js.map +0 -1
  296. package/dist/esm/index.mjs.map +0 -1
  297. package/dist/esm/index.native.js.map +0 -1
  298. package/dist/esm/metro-config/types.mjs.map +0 -1
  299. package/dist/esm/metro-config/types.native.js.map +0 -1
  300. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs +0 -46
  301. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs.map +0 -1
  302. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js +0 -54
  303. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js.map +0 -1
  304. package/dist/esm/rn-commands/bundle/index.mjs.map +0 -1
  305. package/dist/esm/rn-commands/bundle/index.native.js.map +0 -1
  306. package/dist/esm/rn-commands/bundle/types.mjs.map +0 -1
  307. package/dist/esm/rn-commands/bundle/types.native.js.map +0 -1
  308. package/dist/esm/rn-commands/index.mjs.map +0 -1
  309. package/dist/esm/rn-commands/index.native.js.map +0 -1
  310. package/dist/esm/transformer/babel-core.mjs.map +0 -1
  311. package/dist/esm/transformer/babel-core.native.js.map +0 -1
  312. package/dist/esm/transformer/metroNativeWorker.test.mjs +0 -1010
  313. package/dist/esm/transformer/metroNativeWorker.test.mjs.map +0 -1
  314. package/dist/esm/transformer/metroNativeWorker.test.native.js +0 -1124
  315. package/dist/esm/transformer/metroNativeWorker.test.native.js.map +0 -1
  316. package/dist/esm/transformer/transformSync.test.mjs +0 -37
  317. package/dist/esm/transformer/transformSync.test.mjs.map +0 -1
  318. package/dist/esm/transformer/transformSync.test.native.js +0 -47
  319. package/dist/esm/transformer/transformSync.test.native.js.map +0 -1
  320. package/dist/esm/transformer/types.mjs.map +0 -1
  321. package/dist/esm/transformer/types.native.js.map +0 -1
  322. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs +0 -14
  323. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs.map +0 -1
  324. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +0 -14
  325. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +0 -1
  326. package/src/plugins/expoManifestRequestHandlerPlugin.ts +0 -88
  327. package/src/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.ts +0 -28
  328. package/types/plugins/expoManifestRequestHandlerPlugin.d.ts +0 -14
  329. package/types/plugins/expoManifestRequestHandlerPlugin.d.ts.map +0 -1
  330. package/types/transformer/metroNativeWorker.test.d.ts +0 -2
  331. package/types/transformer/metroNativeWorker.test.d.ts.map +0 -1
  332. package/types/transformer/transformSync.test.d.ts +0 -2
  333. package/types/transformer/transformSync.test.d.ts.map +0 -1
  334. package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts +0 -5
  335. package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts.map +0 -1
@@ -35,33 +35,25 @@ const babelCalls = {
35
35
 
36
36
  vi.mock('@babel/core', async (importOriginal) => {
37
37
  const actual = await importOriginal<typeof import('@babel/core')>()
38
- return {
39
- ...actual,
40
- transform: vi.fn((...args: any[]) => {
41
- babelCalls.transform++
42
- return (actual.transform as any)(...args)
43
- }),
44
- transformSync: vi.fn((...args: any[]) => {
45
- babelCalls.transformSync++
46
- return (actual.transformSync as any)(...args)
47
- }),
48
- transformAsync: vi.fn((...args: any[]) => {
49
- babelCalls.transformAsync++
50
- return (actual.transformAsync as any)(...args)
51
- }),
52
- transformFromAstSync: vi.fn((...args: any[]) => {
53
- babelCalls.transformFromAstSync++
54
- return (actual.transformFromAstSync as any)(...args)
55
- }),
56
- parse: vi.fn((...args: any[]) => {
57
- babelCalls.parse++
58
- return (actual.parse as any)(...args)
59
- }),
60
- parseSync: vi.fn((...args: any[]) => {
61
- babelCalls.parseSync++
62
- return (actual.parseSync as any)(...args)
63
- }),
64
- }
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 } }
65
57
  })
66
58
 
67
59
  // module scope so every describe in this file can assert it, not just the first
@@ -74,6 +66,20 @@ beforeEach(() => {
74
66
  babelCalls.parseSync = 0
75
67
  })
76
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
+
77
83
  function assertZeroBabelCalls() {
78
84
  expect(babelCalls.transform).toBe(0)
79
85
  expect(babelCalls.transformSync).toBe(0)
@@ -240,7 +246,9 @@ describe('metroNativeWorker', () => {
240
246
  off.find((d) => d.name === 'react-native-worklets-core')!.data.isOptional
241
247
  ).toBeUndefined()
242
248
 
243
- const on = extractDependencies(code, 'setup.js', { allowOptionalDependencies: true })
249
+ const on = extractDependencies(code, 'setup.js', {
250
+ allowOptionalDependencies: true,
251
+ })
244
252
  expect(on.find((d) => d.name === 'react-native-worklets-core')!.data.isOptional).toBe(
245
253
  true
246
254
  )
@@ -403,7 +411,7 @@ describe('metroNativeWorker', () => {
403
411
  it('handles Asset files without Babel', async () => {
404
412
  const result = await transform(
405
413
  {
406
- assetRegistryPath: 'react-native/Libraries/Image/AssetRegistry',
414
+ assetRegistryPath: 'react-native/asset-registry',
407
415
  publicPath: '/assets',
408
416
  },
409
417
  '/project',
@@ -418,10 +426,10 @@ describe('metroNativeWorker', () => {
418
426
  expect(result.output[0].data.code).toContain('__d(function')
419
427
 
420
428
  const depNames = result.dependencies.map((d) => d.name)
421
- expect(depNames).toContain('react-native/Libraries/Image/AssetRegistry')
429
+ expect(depNames).toContain('react-native/asset-registry')
422
430
  })
423
431
 
424
- it('handles Flow files by stripping types without Babel', async () => {
432
+ it('strips Flow types with a single hermes-parser Babel pass', async () => {
425
433
  const flowSource = `
426
434
  // @flow
427
435
  function add(a: number, b: number): number {
@@ -438,11 +446,41 @@ describe('metroNativeWorker', () => {
438
446
  { dev: false, platform: 'ios', type: 'module' }
439
447
  )
440
448
 
441
- assertZeroBabelCalls()
449
+ assertOnlyFlowStripBabelCall()
442
450
  expect(result.output[0].data.code).not.toContain(': number')
443
451
  expect(result.output[0].data.code).toContain('function add(a, b)')
444
452
  })
445
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
+
446
484
  it('generates a deterministic cache key without Babel', () => {
447
485
  const key1 = getCacheKey(
448
486
  { globalPrefix: '__one_', minifierPath: 'terser' },
@@ -474,7 +512,7 @@ describe('metroNativeWorker', () => {
474
512
  expect(configDefault.defaultConfig.transformerPath).toContain('metroNativeWorker')
475
513
  expect(configDefault.defaultConfig.transformer.transformerPath).toBeUndefined()
476
514
 
477
- // Opting back into babel via metroPluginOptions leaves expo's default
515
+ // Opting back into babel via metroPluginOptions leaves Metro's default
478
516
  // worker in the key, which is itself proof that top level is where metro
479
517
  // reads it from.
480
518
  const configOptOff = await buildMetroConfigInputFromViteConfig(mockViteConfig, {
@@ -496,6 +534,29 @@ describe('metroNativeWorker', () => {
496
534
  delete process.env.ONE_METRO_NATIVE_TRANSFORMS
497
535
  })
498
536
 
537
+ it('excludes volatile compiler caches from Metro without hiding package output', async () => {
538
+ const config = await buildMetroConfigInputFromViteConfig(
539
+ { root: process.cwd() } as any,
540
+ { watchman: false }
541
+ )
542
+ const blockList = config.defaultConfig.resolver.blockList as RegExp[]
543
+ const isBlocked = (file: string) => blockList.some((pattern) => pattern.test(file))
544
+
545
+ expect(
546
+ isBlocked(
547
+ '/home/runner/work/one/one/tests/test-app-cases/node_modules/.vxrn/compiler-cache'
548
+ )
549
+ ).toBe(true)
550
+ expect(
551
+ isBlocked(
552
+ 'C:\\workspace\\tests\\test-app-cases\\node_modules\\.vxrn\\compiler-cache'
553
+ )
554
+ ).toBe(true)
555
+ expect(isBlocked('/home/runner/work/one/one/packages/one/dist/esm/index.mjs')).toBe(
556
+ false
557
+ )
558
+ })
559
+
499
560
  it('falls back to default Metro babel transformer when a user babel config exists', async () => {
500
561
  const tempDir = path.join(process.cwd(), `.tmp-metro-test-${Date.now()}`)
501
562
  fs.mkdirSync(tempDir, { recursive: true })
@@ -508,9 +569,12 @@ describe('metroNativeWorker', () => {
508
569
  const config1 = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
509
570
  expect(config1.defaultConfig.transformerPath).toContain('metroNativeWorker')
510
571
 
511
- // Generated @one-generated config is ignored, still uses metroNativeWorker
572
+ // a config written by `one patch` is ignored, still uses metroNativeWorker
512
573
  const babelConfigPath = path.join(tempDir, 'babel.config.js')
513
- fs.writeFileSync(babelConfigPath, '// @one-generated\nmodule.exports = {}')
574
+ fs.writeFileSync(
575
+ babelConfigPath,
576
+ '// @one/generated bundler-config\nmodule.exports = {}'
577
+ )
514
578
  const config2 = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
515
579
  expect(config2.defaultConfig.transformerPath).toContain('metroNativeWorker')
516
580
 
@@ -547,9 +611,7 @@ describe('metroNativeWorker', () => {
547
611
  delete process.env.ONE_METRO_NATIVE_TRANSFORMS
548
612
  const mockViteConfig = { root: tempDir } as any
549
613
  const warnsWithConfig = (spy: any) =>
550
- spy.mock.calls.some((args: any[]) =>
551
- args.join(' ').includes(babelConfigPath)
552
- )
614
+ spy.mock.calls.some((args: any[]) => args.join(' ').includes(babelConfigPath))
553
615
 
554
616
  // explicit option force still uses the worker, but names the dropped config
555
617
  const optionWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
@@ -579,9 +641,7 @@ describe('metroNativeWorker', () => {
579
641
  const respectedWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
580
642
  try {
581
643
  const respected = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
582
- expect(respected.defaultConfig.transformerPath).not.toContain(
583
- 'metroNativeWorker'
584
- )
644
+ expect(respected.defaultConfig.transformerPath).not.toContain('metroNativeWorker')
585
645
  expect(warnsWithConfig(respectedWarn)).toBe(false)
586
646
  } finally {
587
647
  respectedWarn.mockRestore()
@@ -610,10 +670,7 @@ describe('metroNativeWorker', () => {
610
670
  // user config: both builders fall back to the babel transformer
611
671
  const babelConfigPath = path.join(tempDir, 'babel.config.js')
612
672
  fs.writeFileSync(babelConfigPath, 'module.exports = { plugins: [] }')
613
- const fallbackInput = await buildMetroConfigInputFromViteConfig(
614
- mockViteConfig,
615
- {}
616
- )
673
+ const fallbackInput = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
617
674
  const fallbackFull = await getMetroConfigFromViteConfig(mockViteConfig, {})
618
675
  expect(fallbackInput.defaultConfig.transformerPath).not.toContain(
619
676
  'metroNativeWorker'
@@ -629,9 +686,7 @@ describe('metroNativeWorker', () => {
629
686
  const forcedFull = await getMetroConfigFromViteConfig(mockViteConfig, {
630
687
  nativeTransforms: true,
631
688
  })
632
- expect(forcedInput.defaultConfig.transformerPath).toContain(
633
- 'metroNativeWorker'
634
- )
689
+ expect(forcedInput.defaultConfig.transformerPath).toContain('metroNativeWorker')
635
690
  expect((forcedFull as any).transformerPath).toContain('metroNativeWorker')
636
691
  expect(
637
692
  forcedWarn.mock.calls.some((args: any[]) =>
@@ -1262,7 +1317,11 @@ describe('one native transform ports', () => {
1262
1317
  it('inlines import.meta.env reads, which oxc otherwise lowers to an empty object', () => {
1263
1318
  // oxc's CJS lowering emits `var import_meta = {}`, so an untouched
1264
1319
  // `import.meta.env.X` silently reads undefined in every native bundle.
1265
- 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
+ }
1266
1325
  const out = applyInlineEnvVars(
1267
1326
  `export const key = import.meta.env.VITE_POSTHOG_API_KEY;
1268
1327
  export const target = import.meta.env?.TAMAGUI_TARGET;
@@ -1357,7 +1416,9 @@ export const all = { ...import.meta.env };`,
1357
1416
  // takeout adds `hot-updater/babel-plugin` for OTA; dropping it silently
1358
1417
  // would ship a build whose updates never apply.
1359
1418
  const withPlugins = (plugins: any[]) =>
1360
- ({ customTransformOptions: { vite: { babelConfig: { plugins } } } }) as any
1419
+ ({
1420
+ customTransformOptions: { vite: { babelConfig: { plugins } } },
1421
+ }) as any
1361
1422
 
1362
1423
  expect(() =>
1363
1424
  assertNoUnportedBabelPlugins(
@@ -1455,3 +1516,160 @@ describe('metro babel fallback config names', () => {
1455
1516
  }
1456
1517
  })
1457
1518
  })
1519
+
1520
+ describe('one public env contract in the metro worker', () => {
1521
+ it('inlines One and Expo public reads in dev and prod with no virtual module', () => {
1522
+ for (const isProduction of [false, true]) {
1523
+ const out = applyInlineEnvVars(
1524
+ `export const values = [process.env.ONE_PUBLIC_API, process.env.EXPO_PUBLIC_API, import.meta.env.EXPO_PUBLIC_API];
1525
+ export const all = { ...import.meta.env };`,
1526
+ 'env.ts',
1527
+ isProduction,
1528
+ { ONE_PUBLIC_API: 'https://api.test' }
1529
+ )
1530
+ expect(out).toContain(
1531
+ 'export const values = ["https://api.test", "https://api.test", "https://api.test"];'
1532
+ )
1533
+ expect(out).toContain('"EXPO_PUBLIC_API":"https://api.test"')
1534
+ expect(out).not.toContain('expo/virtual/env')
1535
+ expect(out).not.toContain('_$$_EXPO_ENV')
1536
+ }
1537
+ })
1538
+
1539
+ it('preserves explicit conflicting values', () => {
1540
+ for (const isProduction of [false, true]) {
1541
+ const out = applyInlineEnvVars(
1542
+ 'export const values = [process.env.ONE_PUBLIC_API, process.env.EXPO_PUBLIC_API];',
1543
+ 'env.ts',
1544
+ isProduction,
1545
+ { ONE_PUBLIC_API: 'one', EXPO_PUBLIC_API: 'expo' }
1546
+ )
1547
+ expect(out).toBe('export const values = ["one", "expo"];')
1548
+ }
1549
+ })
1550
+
1551
+ it('accepts Expo runtime feature flags that are not configured', () => {
1552
+ const out = applyInlineEnvVars(
1553
+ 'export const useRnFetch = process.env.EXPO_PUBLIC_USE_RN_FETCH;',
1554
+ '/app/node_modules/expo/build/winter/runtime.native.js',
1555
+ false,
1556
+ { EXPO_PUBLIC_USE_RN_FETCH: undefined }
1557
+ )
1558
+ expect(out).toBe('export const useRnFetch = undefined;')
1559
+ })
1560
+
1561
+ it('carries public aliases through the whole import.meta.env object', () => {
1562
+ const out = applyInlineEnvVars(
1563
+ 'export const all = { ...import.meta.env };',
1564
+ 'env.ts',
1565
+ true,
1566
+ { ONE_PUBLIC_API: 'one' }
1567
+ )
1568
+ expect(out).toContain('"ONE_PUBLIC_API":"one"')
1569
+ expect(out).toContain('"EXPO_PUBLIC_API":"one"')
1570
+ })
1571
+ })
1572
+
1573
+ describe('optional expo virtual env', () => {
1574
+ const virtualFilename = '/proj/node_modules/expo/virtual/env.js'
1575
+ const virtualSource = 'export const env = process.env;'
1576
+
1577
+ function runFactory(
1578
+ code: string,
1579
+ opts: { requireImpl: (...args: any[]) => any; procEnv: Record<string, string> }
1580
+ ) {
1581
+ const module = { exports: {} as any }
1582
+ vm.runInNewContext(code, {
1583
+ __d(factory: any) {
1584
+ factory(
1585
+ {},
1586
+ opts.requireImpl,
1587
+ (v: any) => v,
1588
+ (v: any) => v,
1589
+ module,
1590
+ module.exports,
1591
+ []
1592
+ )
1593
+ },
1594
+ process: { env: opts.procEnv },
1595
+ console,
1596
+ })
1597
+ return module.exports
1598
+ }
1599
+
1600
+ const noRequire = () => {
1601
+ throw new Error('unexpected require call')
1602
+ }
1603
+
1604
+ it('merges .env files over process.env in dev like upstream', async () => {
1605
+ const result = await transform({}, '/proj', virtualFilename, Buffer.from(virtualSource), {
1606
+ dev: true,
1607
+ minify: false,
1608
+ platform: 'ios',
1609
+ type: 'module',
1610
+ customTransformOptions: { environment: 'client' },
1611
+ })
1612
+ const code = result.output[0].data.code
1613
+ expect(code).toContain('dotEnvModules')
1614
+ expect(code).toContain('.env.development.local')
1615
+ const contextModule: any = () => ({
1616
+ default: { EXPO_PUBLIC_SENTINEL_DOTENV: 'dotenv-sentinel-value' },
1617
+ })
1618
+ contextModule.keys = () => ['./.env']
1619
+ // metro lowers require.context(rel) to require(contextId, rel)
1620
+ const requireImpl: any = (_id: unknown, _rel?: unknown) => contextModule
1621
+ const mod = runFactory(code, {
1622
+ requireImpl,
1623
+ procEnv: { EXPO_PUBLIC_SENTINEL_PROC: 'proc-sentinel-value' },
1624
+ })
1625
+ expect(mod.env.EXPO_PUBLIC_SENTINEL_DOTENV).toBe('dotenv-sentinel-value')
1626
+ expect(mod.env.EXPO_PUBLIC_SENTINEL_PROC).toBe('proc-sentinel-value')
1627
+ })
1628
+
1629
+ it('throws a naming error in production like upstream', async () => {
1630
+ const result = await transform({}, '/proj', virtualFilename, Buffer.from(virtualSource), {
1631
+ dev: false,
1632
+ minify: false,
1633
+ platform: 'ios',
1634
+ type: 'module',
1635
+ customTransformOptions: { environment: 'client' },
1636
+ })
1637
+ const mod = runFactory(result.output[0].data.code, {
1638
+ requireImpl: noRequire,
1639
+ procEnv: {},
1640
+ })
1641
+ expect(() => mod.env.EXPO_PUBLIC_ANYTHING).toThrow(
1642
+ 'not supported in production bundles'
1643
+ )
1644
+ })
1645
+
1646
+ it('leaves .env files alone without Expo installed', async () => {
1647
+ const result = await transform(
1648
+ {},
1649
+ '/proj-no-expo',
1650
+ '/proj-no-expo/.env',
1651
+ Buffer.from('EXPO_PUBLIC_A=1\nSECRET=2\n'),
1652
+ {
1653
+ dev: true,
1654
+ minify: false,
1655
+ platform: 'ios',
1656
+ type: 'module',
1657
+ customTransformOptions: { environment: 'client' },
1658
+ }
1659
+ )
1660
+ const code = result.output[0].data.code
1661
+ expect(code).toContain('EXPO_PUBLIC_A')
1662
+ expect(code).not.toContain('EXPO_PUBLIC_A":"1')
1663
+ })
1664
+
1665
+ it('leaves the virtual module alone outside client environments', async () => {
1666
+ const result = await transform({}, '/proj', virtualFilename, Buffer.from(virtualSource), {
1667
+ dev: true,
1668
+ minify: false,
1669
+ platform: 'ios',
1670
+ type: 'module',
1671
+ customTransformOptions: { environment: 'react-server' },
1672
+ })
1673
+ expect(result.output[0].data.code).not.toContain('require.context')
1674
+ })
1675
+ })
@@ -8,10 +8,14 @@ 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,
14
15
  } from '@vxrn/compiler'
16
+ import { withExpoPublicEnvAliases } from '@vxrn/utils/publicEnv'
17
+
18
+ import { substituteExpoVirtualEnvSource } from './expoVirtualEnv'
15
19
  import { getPlatformEnv, metroPlatformToViteEnvironment } from '../env/platformEnv'
16
20
 
17
21
  /**
@@ -514,16 +518,15 @@ export function applyModuleResolverAliases(
514
518
  }
515
519
 
516
520
  /**
517
- * Native port of babel-preset-expo's `expo-inline-or-reference-env-vars` and
518
- * one's `babel-plugin-inline-one-server-url`. In production every
519
- * `process.env.EXPO_PUBLIC_*` read is inlined as a literal; in development each
520
- * one is routed through the `expo/virtual/env` module so edits to .env take
521
- * effect without a full rebuild. Without this the reads survive into the bundle
522
- * and every EXPO_PUBLIC_ value is undefined at runtime.
521
+ * Native port of one's `babel-plugin-inline-one-server-url` for public env.
522
+ * Every `process.env.ONE_PUBLIC_*` or `process.env.EXPO_PUBLIC_*` read is
523
+ * inlined as a literal in both modes,
524
+ * matching the rolldown native defines: a native runtime has no `process.env`
525
+ * to read it back out of, and without this the reads survive into the bundle
526
+ * and every public value is undefined at runtime.
523
527
  *
524
528
  * `process.env.ONE_SERVER_URL` is inlined in both modes, matching one's plugin:
525
- * it is how a native bundle knows where to fetch loader data from, and a native
526
- * runtime has no `process.env` to read it back out of.
529
+ * it is how a native bundle knows where to fetch loader data from.
527
530
  *
528
531
  * Both live in one pass because they are the same rewrite over the same walk,
529
532
  * and a second parse of every file is the cost this transformer exists to avoid.
@@ -542,8 +545,14 @@ export function applyInlineEnvVars(
542
545
  }
543
546
  if (!parsed?.program) return code
544
547
 
548
+ const processPublicEnv = Object.fromEntries(
549
+ Object.entries(process.env).filter(
550
+ ([key]) => key.startsWith('ONE_PUBLIC_') || key.startsWith('EXPO_PUBLIC_')
551
+ )
552
+ )
553
+ const effectiveEnv = withExpoPublicEnvAliases({ ...processPublicEnv, ...env })
554
+
545
555
  const ms = new MagicString(code)
546
- let needsEnvImport = false
547
556
 
548
557
  // edits are collected rather than written straight through, because a folded
549
558
  // dead branch swallows the range an inner edit sits in and MagicString throws
@@ -596,13 +605,12 @@ export function applyInlineEnvVars(
596
605
  return
597
606
  }
598
607
 
599
- if (isProcessEnv && !isAssignmentTarget && key?.startsWith('EXPO_PUBLIC_')) {
600
- if (isProduction) {
601
- replace(node, process.env[key] ?? undefined)
602
- } else {
603
- edits.push({ start: node.start, end: node.end, text: `_$$_EXPO_ENV.${key}` })
604
- needsEnvImport = true
605
- }
608
+ if (
609
+ isProcessEnv &&
610
+ !isAssignmentTarget &&
611
+ (key?.startsWith('ONE_PUBLIC_') || key?.startsWith('EXPO_PUBLIC_'))
612
+ ) {
613
+ replace(node, effectiveEnv[key] ?? undefined)
606
614
  return
607
615
  }
608
616
 
@@ -615,21 +623,30 @@ export function applyInlineEnvVars(
615
623
  keyOf(obj.property, obj.computed) === 'env' &&
616
624
  key !== undefined
617
625
  ) {
618
- replace(node, env[key])
626
+ replace(node, effectiveEnv[key])
619
627
  return
620
628
  }
621
629
 
622
630
  // bare `import.meta.env`, spread or passed around whole.
623
631
  if (!isAssignmentTarget && isImportMeta(obj) && key === 'env') {
624
- edits.push({ start: node.start, end: node.end, text: JSON.stringify(env) })
632
+ edits.push({
633
+ start: node.start,
634
+ end: node.end,
635
+ text: JSON.stringify(effectiveEnv),
636
+ })
625
637
  return
626
638
  }
627
639
 
628
640
  // `process.env.X` for anything the vite env map defines. runs after the
629
- // two branches above so ONE_SERVER_URL and EXPO_PUBLIC_ keep their own
641
+ // branches above so ONE_SERVER_URL and public env keep their own
630
642
  // handling.
631
- if (isProcessEnv && !isAssignmentTarget && key !== undefined && key in env) {
632
- replace(node, env[key])
643
+ if (
644
+ isProcessEnv &&
645
+ !isAssignmentTarget &&
646
+ key !== undefined &&
647
+ key in effectiveEnv
648
+ ) {
649
+ replace(node, effectiveEnv[key])
633
650
  return
634
651
  }
635
652
  }
@@ -725,9 +742,6 @@ export function applyInlineEnvVars(
725
742
  ms.overwrite(edit.start, edit.end, edit.text)
726
743
  }
727
744
 
728
- if (needsEnvImport) {
729
- ms.prepend(`import { env as _$$_EXPO_ENV } from "expo/virtual/env";\n`)
730
- }
731
745
  return ms.hasChanged() ? ms.toString() : code
732
746
  }
733
747
 
@@ -1884,39 +1898,16 @@ export async function transform(
1884
1898
 
1885
1899
  let sourceCode = typeof data === 'string' ? data : data.toString('utf8')
1886
1900
 
1887
- // expo's own transform worker substitutes the source of two virtual files
1888
- // before transforming them. this worker replaces that worker outright, so
1889
- // without the same substitution `expo/virtual/env` stays a bare
1890
- // `process.env` re-export and no .env file ever reaches the bundle.
1891
- const environment = options.customTransformOptions?.environment
1892
- const isClientEnvironment = environment !== 'node' && environment !== 'react-server'
1893
-
1894
- if (isClientEnvironment && /[\\/]expo[\\/]virtual[\\/]env\.js$/.test(filename)) {
1895
- if (options.dev) {
1896
- const rel = path
1897
- .relative(path.dirname(filename), projectRoot)
1898
- .split(path.sep)
1899
- .join('/')
1900
- sourceCode = `const dotEnvModules = require.context(${JSON.stringify(rel)},false,/^\\.\\/\\.env/);
1901
- export const env = !dotEnvModules.keys().length ? process.env : { ...process.env, ...['.env', '.env.development', '.env.local', '.env.development.local'].reduce((acc, file) => {
1902
- return { ...acc, ...(dotEnvModules(file)?.default ?? {}) };
1903
- }, {}) };`
1904
- } else {
1905
- // production inlines every value at its use site, so reaching this module
1906
- // at all is a bug worth naming rather than silently returning undefined.
1907
- sourceCode = `export const env = new Proxy({}, {
1908
- get(target, key) {
1909
- throw new Error(\`Attempting to access internal environment variable "\${String(key)}" is not supported in production bundles.\`);
1910
- },
1911
- });`
1912
- }
1913
- } else if (
1914
- /(^|[\\/])\.env(\.(local|(development|production)(\.local)?))?$/.test(filename)
1915
- ) {
1916
- const { parseEnvFile } =
1917
- await import('@expo/metro-config/build/transform-worker/dot-env-development')
1918
- sourceCode = `export default ${JSON.stringify(parseEnvFile(sourceCode, isClientEnvironment))};`
1919
- }
1901
+ // narrow optional Expo compatibility, shared with the babel
1902
+ // transformer: only expo/virtual/env.js and .env files are special, and
1903
+ // apps without Expo installed never resolve or load any Expo module.
1904
+ sourceCode = substituteExpoVirtualEnvSource({
1905
+ filename,
1906
+ src: sourceCode,
1907
+ projectRoot,
1908
+ dev: options.dev,
1909
+ environment: options.customTransformOptions?.environment,
1910
+ })
1920
1911
 
1921
1912
  checkReservedStrings(sourceCode, config, options)
1922
1913
 
@@ -1986,8 +1977,7 @@ export const env = !dotEnvModules.keys().length ? process.env : { ...process.env
1986
1977
 
1987
1978
  // 2. Asset files
1988
1979
  if (options.type === 'asset') {
1989
- const assetRegistryPath =
1990
- config.assetRegistryPath || 'react-native/Libraries/Image/AssetRegistry'
1980
+ const assetRegistryPath = config.assetRegistryPath || 'react-native/asset-registry'
1991
1981
  let properDescriptor: any = null
1992
1982
 
1993
1983
  const absolutePath = path.resolve(projectRoot, filename)
@@ -2144,15 +2134,7 @@ export const env = !dotEnvModules.keys().length ? process.env : { ...process.env
2144
2134
  // Step A: Flow stripping
2145
2135
  if (shouldStripFlow(filename, code)) {
2146
2136
  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
- })
2137
+ const flowResult = await stripFlowTypes(filename, code)
2156
2138
  if (flowResult?.code) {
2157
2139
  code = flowResult.code
2158
2140
  if (flowResult.map) {
@@ -2185,9 +2167,9 @@ export const env = !dotEnvModules.keys().length ? process.env : { ...process.env
2185
2167
  }
2186
2168
  }
2187
2169
 
2188
- // Step A2: expo public env vars, one's server url, and `import.meta.env`.
2189
- // after flow stripping so the parse succeeds, before extraction so both the
2190
- // injected `expo/virtual/env` import and any folded-away dead branch are seen.
2170
+ // Step A2: one public env vars, one's server url, and `import.meta.env`.
2171
+ // after flow stripping so the parse succeeds, before extraction so any
2172
+ // folded-away dead branch is seen.
2191
2173
  // the substring guards keep the extra parse off files with no such read at all.
2192
2174
  if (code.includes('process.env') || code.includes('import.meta')) {
2193
2175
  code = applyInlineEnvVars(code, filename, !options.dev, getImportMetaEnv(options))
@@ -47,4 +47,26 @@ describe('transformSync', () => {
47
47
  )
48
48
  ).toThrow('use `importForwarding.moduleNames`')
49
49
  })
50
+
51
+ it('parses the readonly Flow interfaces shipped by React Native 0.87', () => {
52
+ const result = transformSync(
53
+ `// @flow strict
54
+ interface Registration<TArgs> {
55
+ readonly context: unknown;
56
+ readonly listener: (...args: TArgs) => unknown;
57
+ }
58
+ export function readContext(registration: Registration<[]>): unknown {
59
+ return registration.context;
60
+ }`,
61
+ {
62
+ filename: '/project/node_modules/react-native/EventEmitter.js',
63
+ babelrc: false,
64
+ configFile: false,
65
+ presets: [require('@react-native/babel-preset')],
66
+ },
67
+ { hermesParser: true }
68
+ )
69
+
70
+ expect(result?.code).toContain('function readContext(registration)')
71
+ })
50
72
  })