@vxrn/vite-plugin-metro 2.0.0-beta.51.1 → 2.0.0-beta.56.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 (142) hide show
  1. package/dist/cjs/env/platformEnv.cjs +2 -0
  2. package/dist/cjs/env/platformEnv.native.cjs +2 -0
  3. package/dist/cjs/env/platformEnv.native.js +2 -0
  4. package/dist/cjs/env/platformEnv.native.js.map +1 -1
  5. package/dist/cjs/index.cjs +0 -2
  6. package/dist/cjs/index.native.cjs +0 -2
  7. package/dist/cjs/index.native.js +0 -2
  8. package/dist/cjs/index.native.js.map +1 -1
  9. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.cjs +10 -15
  10. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.cjs +27 -48
  11. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js +27 -48
  12. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +1 -1
  13. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.cjs +71 -38
  14. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.cjs +86 -42
  15. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js +86 -42
  16. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
  17. package/dist/cjs/transformer/babel-transformer.cjs +53 -4
  18. package/dist/cjs/transformer/babel-transformer.native.cjs +65 -6
  19. package/dist/cjs/transformer/babel-transformer.native.js +65 -6
  20. package/dist/cjs/transformer/babel-transformer.native.js.map +1 -1
  21. package/dist/cjs/transformer/expoVirtualEnv.cjs +92 -0
  22. package/dist/cjs/transformer/expoVirtualEnv.native.cjs +113 -0
  23. package/dist/cjs/transformer/expoVirtualEnv.native.js +115 -0
  24. package/dist/cjs/transformer/expoVirtualEnv.native.js.map +1 -0
  25. package/dist/cjs/transformer/loadBabelConfig.cjs +1 -1
  26. package/dist/cjs/transformer/loadBabelConfig.native.cjs +1 -1
  27. package/dist/cjs/transformer/loadBabelConfig.native.js +1 -1
  28. package/dist/cjs/transformer/loadBabelConfig.native.js.map +1 -1
  29. package/dist/cjs/transformer/metroNativeWorker.cjs +20 -29
  30. package/dist/cjs/transformer/metroNativeWorker.native.cjs +24 -30
  31. package/dist/cjs/transformer/metroNativeWorker.native.js +24 -30
  32. package/dist/cjs/transformer/metroNativeWorker.native.js.map +1 -1
  33. package/dist/cjs/transformer/transformSync.cjs +3 -3
  34. package/dist/cjs/transformer/transformSync.native.cjs +3 -3
  35. package/dist/cjs/transformer/transformSync.native.js +3 -3
  36. package/dist/cjs/transformer/transformSync.native.js.map +1 -1
  37. package/dist/cjs/utils/exit.cjs +1 -1
  38. package/dist/cjs/utils/exit.native.cjs +1 -1
  39. package/dist/cjs/utils/exit.native.js +1 -1
  40. package/dist/cjs/utils/exit.native.js.map +1 -1
  41. package/dist/esm/env/platformEnv.mjs +2 -0
  42. package/dist/esm/env/platformEnv.mjs.map +1 -1
  43. package/dist/esm/env/platformEnv.native.js +2 -0
  44. package/dist/esm/env/platformEnv.native.js.map +1 -1
  45. package/dist/esm/index.js +1 -2
  46. package/dist/esm/index.mjs +1 -2
  47. package/dist/esm/index.native.js +1 -2
  48. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs +11 -15
  49. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs.map +1 -1
  50. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js +28 -48
  51. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +1 -1
  52. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs +71 -38
  53. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs.map +1 -1
  54. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js +86 -42
  55. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
  56. package/dist/esm/transformer/babel-transformer.mjs +133 -96
  57. package/dist/esm/transformer/babel-transformer.mjs.map +1 -1
  58. package/dist/esm/transformer/babel-transformer.native.js +147 -103
  59. package/dist/esm/transformer/babel-transformer.native.js.map +1 -1
  60. package/dist/esm/transformer/expoVirtualEnv.mjs +67 -0
  61. package/dist/esm/transformer/expoVirtualEnv.mjs.map +1 -0
  62. package/dist/esm/transformer/expoVirtualEnv.native.js +86 -0
  63. package/dist/esm/transformer/expoVirtualEnv.native.js.map +1 -0
  64. package/dist/esm/transformer/loadBabelConfig.mjs +1 -1
  65. package/dist/esm/transformer/loadBabelConfig.mjs.map +1 -1
  66. package/dist/esm/transformer/loadBabelConfig.native.js +1 -1
  67. package/dist/esm/transformer/loadBabelConfig.native.js.map +1 -1
  68. package/dist/esm/transformer/metroNativeWorker.mjs +20 -29
  69. package/dist/esm/transformer/metroNativeWorker.mjs.map +1 -1
  70. package/dist/esm/transformer/metroNativeWorker.native.js +24 -30
  71. package/dist/esm/transformer/metroNativeWorker.native.js.map +1 -1
  72. package/dist/esm/transformer/transformSync.mjs +3 -3
  73. package/dist/esm/transformer/transformSync.mjs.map +1 -1
  74. package/dist/esm/transformer/transformSync.native.js +3 -3
  75. package/dist/esm/transformer/transformSync.native.js.map +1 -1
  76. package/dist/esm/utils/exit.mjs +1 -1
  77. package/dist/esm/utils/exit.mjs.map +1 -1
  78. package/dist/esm/utils/exit.native.js +1 -1
  79. package/dist/esm/utils/exit.native.js.map +1 -1
  80. package/package.json +7 -9
  81. package/src/babel-plugins/import-meta-env-plugin.ts +1 -1
  82. package/src/env/platformEnv.test.ts +12 -2
  83. package/src/env/platformEnv.ts +3 -0
  84. package/src/index.ts +0 -2
  85. package/src/metro-config/getMetroBabelConfigFromViteConfig.test.ts +19 -25
  86. package/src/metro-config/getMetroBabelConfigFromViteConfig.ts +8 -27
  87. package/src/metro-config/getMetroConfigFromViteConfig.test.ts +60 -0
  88. package/src/metro-config/getMetroConfigFromViteConfig.ts +119 -96
  89. package/src/plugins/metroPlugin.ts +3 -6
  90. package/src/transformer/babel-transformer.test.ts +118 -0
  91. package/src/transformer/babel-transformer.ts +82 -15
  92. package/src/transformer/expoVirtualEnv.integration.test.ts +106 -0
  93. package/src/transformer/expoVirtualEnv.test.ts +72 -0
  94. package/src/transformer/expoVirtualEnv.ts +115 -0
  95. package/src/transformer/loadBabelConfig.ts +1 -1
  96. package/src/transformer/metroNativeWorker.test.ts +134 -17
  97. package/src/transformer/metroNativeWorker.ts +43 -51
  98. package/src/transformer/transformSync.test.ts +22 -0
  99. package/src/transformer/transformSync.ts +4 -4
  100. package/src/utils/exit.ts +2 -2
  101. package/src/utils/getTerminalReporter.ts +1 -1
  102. package/src/utils/projectImport.ts +2 -2
  103. package/types/babel-plugins/import-meta-env-plugin.d.ts +1 -1
  104. package/types/env/platformEnv.d.ts +1 -0
  105. package/types/env/platformEnv.d.ts.map +1 -1
  106. package/types/index.d.ts +0 -2
  107. package/types/index.d.ts.map +1 -1
  108. package/types/metro-config/getMetroBabelConfigFromViteConfig.d.ts +1 -1
  109. package/types/metro-config/getMetroBabelConfigFromViteConfig.d.ts.map +1 -1
  110. package/types/metro-config/getMetroConfigFromViteConfig.d.ts +2 -2
  111. package/types/metro-config/getMetroConfigFromViteConfig.d.ts.map +1 -1
  112. package/types/plugins/metroPlugin.d.ts +2 -4
  113. package/types/plugins/metroPlugin.d.ts.map +1 -1
  114. package/types/transformer/babel-transformer.d.ts +10 -1
  115. package/types/transformer/babel-transformer.d.ts.map +1 -1
  116. package/types/transformer/expoVirtualEnv.d.ts +8 -0
  117. package/types/transformer/expoVirtualEnv.d.ts.map +1 -0
  118. package/types/transformer/metroNativeWorker.d.ts +3 -5
  119. package/types/transformer/metroNativeWorker.d.ts.map +1 -1
  120. package/types/utils/projectImport.d.ts +2 -2
  121. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.cjs +0 -59
  122. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.cjs +0 -62
  123. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js +0 -64
  124. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js.map +0 -1
  125. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.cjs +0 -35
  126. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.cjs +0 -37
  127. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +0 -39
  128. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +0 -1
  129. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs +0 -40
  130. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs.map +0 -1
  131. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js +0 -41
  132. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js.map +0 -1
  133. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs +0 -15
  134. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs.map +0 -1
  135. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +0 -15
  136. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +0 -1
  137. package/src/plugins/expoManifestRequestHandlerPlugin.ts +0 -88
  138. package/src/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.ts +0 -28
  139. package/types/plugins/expoManifestRequestHandlerPlugin.d.ts +0 -14
  140. package/types/plugins/expoManifestRequestHandlerPlugin.d.ts.map +0 -1
  141. package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts +0 -5
  142. package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts.map +0 -1
@@ -25,12 +25,12 @@ function transformSync(src, babelConfig, { hermesParser }) {
25
25
  return parseWithBabel(src, loadedBabelConfig);
26
26
  }
27
27
  if (!isTypeScript && (hermesParser || src.includes(" @flow"))) {
28
- return parseWithHermes(src, loadedBabelConfig);
28
+ return parseWithFlow(src, loadedBabelConfig);
29
29
  }
30
30
  return parseWithBabel(src, loadedBabelConfig);
31
31
  }
32
- function parseWithHermes(src, babelConfig) {
33
- const sourceAst = require("hermes-parser").parse(src, {
32
+ function parseWithFlow(src, babelConfig) {
33
+ const sourceAst = require("flow-parser").parse(src, {
34
34
  babel: true,
35
35
  sourceType: babelConfig.sourceType
36
36
  });
@@ -1 +1 @@
1
- {"version":3,"file":"transformSync.js","names":[],"sources":["esm/transformer/transformSync.js"],"sourcesContent":["import * as babel from \"./babel-core\";\nfunction isTypeScriptSource(fileName) {\n return fileName?.endsWith(\".ts\");\n}\nfunction isTSXSource(fileName) {\n return fileName?.endsWith(\".tsx\");\n}\nfunction transformSync(src, babelConfig, { hermesParser }) {\n const loadedBabelConfig = babel.loadOptions(\n babelConfig\n );\n if (!loadedBabelConfig) return null;\n let hasWorkletsPlugin = false;\n loadedBabelConfig.plugins = loadedBabelConfig.plugins?.filter((plugin) => {\n const workletsPlugin = plugin;\n if (workletsPlugin.key !== \"worklets\") return true;\n if (workletsPlugin.options && \"workletizableModules\" in workletsPlugin.options) {\n throw new Error(\n \"[vxrn] `workletizableModules` was removed from react-native-worklets. use `importForwarding.moduleNames`.\"\n );\n }\n if (hasWorkletsPlugin) return false;\n hasWorkletsPlugin = true;\n return true;\n });\n const isTypeScript = isTypeScriptSource(loadedBabelConfig.filename ?? \"\") || isTSXSource(loadedBabelConfig.filename ?? \"\");\n if (isTypeScript) {\n return parseWithBabel(src, loadedBabelConfig);\n }\n if (!isTypeScript && // The Hermes parser doesn't support comments or babel proposals such as export default from, meaning it has lower compatibility with larger parts\n // of the ecosystem.\n // However, React Native ships with flow syntax that isn't supported in Babel so we need to use Hermes for those files.\n // We can try to quickly detect if the file uses flow syntax by checking for the @flow pragma which is present in every React Native file.\n (hermesParser || src.includes(\" @flow\"))) {\n return parseWithHermes(src, loadedBabelConfig);\n }\n return parseWithBabel(src, loadedBabelConfig);\n}\nfunction parseWithHermes(src, babelConfig) {\n const sourceAst = require(\"hermes-parser\").parse(src, {\n babel: true,\n sourceType: babelConfig.sourceType\n });\n return babel.transformFromAstSync(sourceAst, src, babelConfig);\n}\nfunction parseWithBabel(src, babelConfig) {\n return babel.transformSync(src, babelConfig);\n}\nexport {\n transformSync\n};\n//# sourceMappingURL=transformSync.js.map\n"],"mappings":";;;;;;;;;;AACA,SAAS,mBAAmB,UAAU;CACpC,OAAO,UAAU,SAAS,KAAK;AACjC;AACA,SAAS,YAAY,UAAU;CAC7B,OAAO,UAAU,SAAS,MAAM;AAClC;AACA,SAAS,cAAc,KAAK,aAAa,EAAE,gBAAgB;CACzD,MAAM,oBAAoB,MAAM,YAC9B,WACF;CACA,IAAI,CAAC,mBAAmB,OAAO;CAC/B,IAAI,oBAAoB;CACxB,kBAAkB,UAAU,kBAAkB,SAAS,QAAQ,WAAW;EACxE,MAAM,iBAAiB;EACvB,IAAI,eAAe,QAAQ,YAAY,OAAO;EAC9C,IAAI,eAAe,WAAW,0BAA0B,eAAe,SAAS;GAC9E,MAAM,IAAI,MACR,2GACF;EACF;EACA,IAAI,mBAAmB,OAAO;EAC9B,oBAAoB;EACpB,OAAO;CACT,CAAC;CACD,MAAM,eAAe,mBAAmB,kBAAkB,YAAY,EAAE,KAAK,YAAY,kBAAkB,YAAY,EAAE;CACzH,IAAI,cAAc;EAChB,OAAO,eAAe,KAAK,iBAAiB;CAC9C;CACA,IAAI,CAAC,iBAIJ,gBAAgB,IAAI,SAAS,QAAQ,IAAI;EACxC,OAAO,gBAAgB,KAAK,iBAAiB;CAC/C;CACA,OAAO,eAAe,KAAK,iBAAiB;AAC9C;AACA,SAAS,gBAAgB,KAAK,aAAa;CACzC,MAAM,sBAAoB,eAAe,CAAC,CAAC,MAAM,KAAK;EACpD,OAAO;EACP,YAAY,YAAY;CAC1B,CAAC;CACD,OAAO,MAAM,qBAAqB,WAAW,KAAK,WAAW;AAC/D;AACA,SAAS,eAAe,KAAK,aAAa;CACxC,OAAO,MAAM,cAAc,KAAK,WAAW;AAC7C"}
1
+ {"version":3,"file":"transformSync.js","names":[],"sources":["esm/transformer/transformSync.js"],"sourcesContent":["import * as babel from \"./babel-core\";\nfunction isTypeScriptSource(fileName) {\n return fileName?.endsWith(\".ts\");\n}\nfunction isTSXSource(fileName) {\n return fileName?.endsWith(\".tsx\");\n}\nfunction transformSync(src, babelConfig, { hermesParser }) {\n const loadedBabelConfig = babel.loadOptions(\n babelConfig\n );\n if (!loadedBabelConfig) return null;\n let hasWorkletsPlugin = false;\n loadedBabelConfig.plugins = loadedBabelConfig.plugins?.filter((plugin) => {\n const workletsPlugin = plugin;\n if (workletsPlugin.key !== \"worklets\") return true;\n if (workletsPlugin.options && \"workletizableModules\" in workletsPlugin.options) {\n throw new Error(\n \"[vxrn] `workletizableModules` was removed from react-native-worklets. use `importForwarding.moduleNames`.\"\n );\n }\n if (hasWorkletsPlugin) return false;\n hasWorkletsPlugin = true;\n return true;\n });\n const isTypeScript = isTypeScriptSource(loadedBabelConfig.filename ?? \"\") || isTSXSource(loadedBabelConfig.filename ?? \"\");\n if (isTypeScript) {\n return parseWithBabel(src, loadedBabelConfig);\n }\n if (!isTypeScript && // The Hermes parser doesn't support comments or babel proposals such as export default from, meaning it has lower compatibility with larger parts\n // of the ecosystem.\n // However, React Native ships with flow syntax that isn't supported in Babel so we need to use Hermes for those files.\n // We can try to quickly detect if the file uses flow syntax by checking for the @flow pragma which is present in every React Native file.\n (hermesParser || src.includes(\" @flow\"))) {\n return parseWithFlow(src, loadedBabelConfig);\n }\n return parseWithBabel(src, loadedBabelConfig);\n}\nfunction parseWithFlow(src, babelConfig) {\n const sourceAst = require(\"flow-parser\").parse(src, {\n babel: true,\n sourceType: babelConfig.sourceType\n });\n return babel.transformFromAstSync(sourceAst, src, babelConfig);\n}\nfunction parseWithBabel(src, babelConfig) {\n return babel.transformSync(src, babelConfig);\n}\nexport {\n transformSync\n};\n//# sourceMappingURL=transformSync.js.map\n"],"mappings":";;;;;;;;;;AACA,SAAS,mBAAmB,UAAU;CACpC,OAAO,UAAU,SAAS,KAAK;AACjC;AACA,SAAS,YAAY,UAAU;CAC7B,OAAO,UAAU,SAAS,MAAM;AAClC;AACA,SAAS,cAAc,KAAK,aAAa,EAAE,gBAAgB;CACzD,MAAM,oBAAoB,MAAM,YAC9B,WACF;CACA,IAAI,CAAC,mBAAmB,OAAO;CAC/B,IAAI,oBAAoB;CACxB,kBAAkB,UAAU,kBAAkB,SAAS,QAAQ,WAAW;EACxE,MAAM,iBAAiB;EACvB,IAAI,eAAe,QAAQ,YAAY,OAAO;EAC9C,IAAI,eAAe,WAAW,0BAA0B,eAAe,SAAS;GAC9E,MAAM,IAAI,MACR,2GACF;EACF;EACA,IAAI,mBAAmB,OAAO;EAC9B,oBAAoB;EACpB,OAAO;CACT,CAAC;CACD,MAAM,eAAe,mBAAmB,kBAAkB,YAAY,EAAE,KAAK,YAAY,kBAAkB,YAAY,EAAE;CACzH,IAAI,cAAc;EAChB,OAAO,eAAe,KAAK,iBAAiB;CAC9C;CACA,IAAI,CAAC,iBAIJ,gBAAgB,IAAI,SAAS,QAAQ,IAAI;EACxC,OAAO,cAAc,KAAK,iBAAiB;CAC7C;CACA,OAAO,eAAe,KAAK,iBAAiB;AAC9C;AACA,SAAS,cAAc,KAAK,aAAa;CACvC,MAAM,sBAAoB,aAAa,CAAC,CAAC,MAAM,KAAK;EAClD,OAAO;EACP,YAAY,YAAY;CAC1B,CAAC;CACD,OAAO,MAAM,qBAAqB,WAAW,KAAK,WAAW;AAC/D;AACA,SAAS,eAAe,KAAK,aAAa;CACxC,OAAO,MAAM,cAAc,KAAK,WAAW;AAC7C"}
@@ -28,12 +28,12 @@ function transformSync(src, babelConfig, param) {
28
28
  return parseWithBabel(src, loadedBabelConfig);
29
29
  }
30
30
  if (!isTypeScript && (hermesParser || src.includes(" @flow"))) {
31
- return parseWithHermes(src, loadedBabelConfig);
31
+ return parseWithFlow(src, loadedBabelConfig);
32
32
  }
33
33
  return parseWithBabel(src, loadedBabelConfig);
34
34
  }
35
- function parseWithHermes(src, babelConfig) {
36
- var sourceAst = require("hermes-parser").parse(src, {
35
+ function parseWithFlow(src, babelConfig) {
36
+ var sourceAst = require("flow-parser").parse(src, {
37
37
  babel: true,
38
38
  sourceType: babelConfig.sourceType
39
39
  });
@@ -1 +1 @@
1
- {"version":3,"file":"transformSync.native.js","names":[],"sources":["esm/transformer/transformSync.native.js"],"sourcesContent":["import * as babel from \"./babel-core\";\nfunction isTypeScriptSource(fileName) {\n return fileName === null || fileName === void 0 ? void 0 : fileName.endsWith(\".ts\");\n}\nfunction isTSXSource(fileName) {\n return fileName === null || fileName === void 0 ? void 0 : fileName.endsWith(\".tsx\");\n}\nfunction transformSync(src, babelConfig, param) {\n var { hermesParser } = param;\n var _loadedBabelConfig_filename, _loadedBabelConfig_filename1;\n var _loadedBabelConfig_plugins;\n var loadedBabelConfig = babel.loadOptions(babelConfig);\n if (!loadedBabelConfig) return null;\n var hasWorkletsPlugin = false;\n loadedBabelConfig.plugins = (_loadedBabelConfig_plugins = loadedBabelConfig.plugins) === null || _loadedBabelConfig_plugins === void 0 ? void 0 : _loadedBabelConfig_plugins.filter(function(plugin) {\n var workletsPlugin = plugin;\n if (workletsPlugin.key !== \"worklets\") return true;\n if (workletsPlugin.options && \"workletizableModules\" in workletsPlugin.options) {\n throw new Error(\"[vxrn] `workletizableModules` was removed from react-native-worklets. use `importForwarding.moduleNames`.\");\n }\n if (hasWorkletsPlugin) return false;\n hasWorkletsPlugin = true;\n return true;\n });\n var isTypeScript = isTypeScriptSource((_loadedBabelConfig_filename = loadedBabelConfig.filename) !== null && _loadedBabelConfig_filename !== void 0 ? _loadedBabelConfig_filename : \"\") || isTSXSource((_loadedBabelConfig_filename1 = loadedBabelConfig.filename) !== null && _loadedBabelConfig_filename1 !== void 0 ? _loadedBabelConfig_filename1 : \"\");\n if (isTypeScript) {\n return parseWithBabel(src, loadedBabelConfig);\n }\n if (!isTypeScript && // The Hermes parser doesn't support comments or babel proposals such as export default from, meaning it has lower compatibility with larger parts\n // of the ecosystem.\n // However, React Native ships with flow syntax that isn't supported in Babel so we need to use Hermes for those files.\n // We can try to quickly detect if the file uses flow syntax by checking for the @flow pragma which is present in every React Native file.\n (hermesParser || src.includes(\" @flow\"))) {\n return parseWithHermes(src, loadedBabelConfig);\n }\n return parseWithBabel(src, loadedBabelConfig);\n}\nfunction parseWithHermes(src, babelConfig) {\n var sourceAst = require(\"hermes-parser\").parse(src, {\n babel: true,\n sourceType: babelConfig.sourceType\n });\n return babel.transformFromAstSync(sourceAst, src, babelConfig);\n}\nfunction parseWithBabel(src, babelConfig) {\n return babel.transformSync(src, babelConfig);\n}\nexport {\n transformSync\n};\n//# sourceMappingURL=transformSync.js.map\n"],"mappings":";;;;;;;;;;AACA,SAAS,mBAAmB,UAAU;CACpC,OAAO,aAAa,QAAQ,aAAa,KAAK,IAAI,KAAK,IAAI,SAAS,SAAS,KAAK;AACpF;AACA,SAAS,YAAY,UAAU;CAC7B,OAAO,aAAa,QAAQ,aAAa,KAAK,IAAI,KAAK,IAAI,SAAS,SAAS,MAAM;AACrF;AACA,SAAS,cAAc,KAAK,aAAa,OAAO;CAC9C,IAAI,EAAE,iBAAiB;CACvB,IAAI,6BAA6B;CACjC,IAAI;CACJ,IAAI,oBAAoB,MAAM,YAAY,WAAW;CACrD,IAAI,CAAC,mBAAmB,OAAO;CAC/B,IAAI,oBAAoB;CACxB,kBAAkB,WAAW,6BAA6B,kBAAkB,aAAa,QAAQ,+BAA+B,KAAK,IAAI,KAAK,IAAI,2BAA2B,OAAO,SAAS,QAAQ;EACnM,IAAI,iBAAiB;EACrB,IAAI,eAAe,QAAQ,YAAY,OAAO;EAC9C,IAAI,eAAe,WAAW,0BAA0B,eAAe,SAAS;GAC9E,MAAM,IAAI,MAAM,2GAA2G;EAC7H;EACA,IAAI,mBAAmB,OAAO;EAC9B,oBAAoB;EACpB,OAAO;CACT,CAAC;CACD,IAAI,eAAe,oBAAoB,8BAA8B,kBAAkB,cAAc,QAAQ,gCAAgC,KAAK,IAAI,8BAA8B,EAAE,KAAK,aAAa,+BAA+B,kBAAkB,cAAc,QAAQ,iCAAiC,KAAK,IAAI,+BAA+B,EAAE;CAC1V,IAAI,cAAc;EAChB,OAAO,eAAe,KAAK,iBAAiB;CAC9C;CACA,IAAI,CAAC,iBAIJ,gBAAgB,IAAI,SAAS,QAAQ,IAAI;EACxC,OAAO,gBAAgB,KAAK,iBAAiB;CAC/C;CACA,OAAO,eAAe,KAAK,iBAAiB;AAC9C;AACA,SAAS,gBAAgB,KAAK,aAAa;CACzC,IAAI,sBAAoB,eAAe,CAAC,CAAC,MAAM,KAAK;EAClD,OAAO;EACP,YAAY,YAAY;CAC1B,CAAC;CACD,OAAO,MAAM,qBAAqB,WAAW,KAAK,WAAW;AAC/D;AACA,SAAS,eAAe,KAAK,aAAa;CACxC,OAAO,MAAM,cAAc,KAAK,WAAW;AAC7C"}
1
+ {"version":3,"file":"transformSync.native.js","names":[],"sources":["esm/transformer/transformSync.native.js"],"sourcesContent":["import * as babel from \"./babel-core\";\nfunction isTypeScriptSource(fileName) {\n return fileName === null || fileName === void 0 ? void 0 : fileName.endsWith(\".ts\");\n}\nfunction isTSXSource(fileName) {\n return fileName === null || fileName === void 0 ? void 0 : fileName.endsWith(\".tsx\");\n}\nfunction transformSync(src, babelConfig, param) {\n var { hermesParser } = param;\n var _loadedBabelConfig_filename, _loadedBabelConfig_filename1;\n var _loadedBabelConfig_plugins;\n var loadedBabelConfig = babel.loadOptions(babelConfig);\n if (!loadedBabelConfig) return null;\n var hasWorkletsPlugin = false;\n loadedBabelConfig.plugins = (_loadedBabelConfig_plugins = loadedBabelConfig.plugins) === null || _loadedBabelConfig_plugins === void 0 ? void 0 : _loadedBabelConfig_plugins.filter(function(plugin) {\n var workletsPlugin = plugin;\n if (workletsPlugin.key !== \"worklets\") return true;\n if (workletsPlugin.options && \"workletizableModules\" in workletsPlugin.options) {\n throw new Error(\"[vxrn] `workletizableModules` was removed from react-native-worklets. use `importForwarding.moduleNames`.\");\n }\n if (hasWorkletsPlugin) return false;\n hasWorkletsPlugin = true;\n return true;\n });\n var isTypeScript = isTypeScriptSource((_loadedBabelConfig_filename = loadedBabelConfig.filename) !== null && _loadedBabelConfig_filename !== void 0 ? _loadedBabelConfig_filename : \"\") || isTSXSource((_loadedBabelConfig_filename1 = loadedBabelConfig.filename) !== null && _loadedBabelConfig_filename1 !== void 0 ? _loadedBabelConfig_filename1 : \"\");\n if (isTypeScript) {\n return parseWithBabel(src, loadedBabelConfig);\n }\n if (!isTypeScript && // The Hermes parser doesn't support comments or babel proposals such as export default from, meaning it has lower compatibility with larger parts\n // of the ecosystem.\n // However, React Native ships with flow syntax that isn't supported in Babel so we need to use Hermes for those files.\n // We can try to quickly detect if the file uses flow syntax by checking for the @flow pragma which is present in every React Native file.\n (hermesParser || src.includes(\" @flow\"))) {\n return parseWithFlow(src, loadedBabelConfig);\n }\n return parseWithBabel(src, loadedBabelConfig);\n}\nfunction parseWithFlow(src, babelConfig) {\n var sourceAst = require(\"flow-parser\").parse(src, {\n babel: true,\n sourceType: babelConfig.sourceType\n });\n return babel.transformFromAstSync(sourceAst, src, babelConfig);\n}\nfunction parseWithBabel(src, babelConfig) {\n return babel.transformSync(src, babelConfig);\n}\nexport {\n transformSync\n};\n//# sourceMappingURL=transformSync.js.map\n"],"mappings":";;;;;;;;;;AACA,SAAS,mBAAmB,UAAU;CACpC,OAAO,aAAa,QAAQ,aAAa,KAAK,IAAI,KAAK,IAAI,SAAS,SAAS,KAAK;AACpF;AACA,SAAS,YAAY,UAAU;CAC7B,OAAO,aAAa,QAAQ,aAAa,KAAK,IAAI,KAAK,IAAI,SAAS,SAAS,MAAM;AACrF;AACA,SAAS,cAAc,KAAK,aAAa,OAAO;CAC9C,IAAI,EAAE,iBAAiB;CACvB,IAAI,6BAA6B;CACjC,IAAI;CACJ,IAAI,oBAAoB,MAAM,YAAY,WAAW;CACrD,IAAI,CAAC,mBAAmB,OAAO;CAC/B,IAAI,oBAAoB;CACxB,kBAAkB,WAAW,6BAA6B,kBAAkB,aAAa,QAAQ,+BAA+B,KAAK,IAAI,KAAK,IAAI,2BAA2B,OAAO,SAAS,QAAQ;EACnM,IAAI,iBAAiB;EACrB,IAAI,eAAe,QAAQ,YAAY,OAAO;EAC9C,IAAI,eAAe,WAAW,0BAA0B,eAAe,SAAS;GAC9E,MAAM,IAAI,MAAM,2GAA2G;EAC7H;EACA,IAAI,mBAAmB,OAAO;EAC9B,oBAAoB;EACpB,OAAO;CACT,CAAC;CACD,IAAI,eAAe,oBAAoB,8BAA8B,kBAAkB,cAAc,QAAQ,gCAAgC,KAAK,IAAI,8BAA8B,EAAE,KAAK,aAAa,+BAA+B,kBAAkB,cAAc,QAAQ,iCAAiC,KAAK,IAAI,+BAA+B,EAAE;CAC1V,IAAI,cAAc;EAChB,OAAO,eAAe,KAAK,iBAAiB;CAC9C;CACA,IAAI,CAAC,iBAIJ,gBAAgB,IAAI,SAAS,QAAQ,IAAI;EACxC,OAAO,cAAc,KAAK,iBAAiB;CAC7C;CACA,OAAO,eAAe,KAAK,iBAAiB;AAC9C;AACA,SAAS,cAAc,KAAK,aAAa;CACvC,IAAI,sBAAoB,aAAa,CAAC,CAAC,MAAM,KAAK;EAChD,OAAO;EACP,YAAY,YAAY;CAC1B,CAAC;CACD,OAAO,MAAM,qBAAqB,WAAW,KAAK,WAAW;AAC/D;AACA,SAAS,eAAe,KAAK,aAAa;CACxC,OAAO,MAAM,cAAc,KAAK,WAAW;AAC7C"}
@@ -119,7 +119,7 @@ function tryWarnActiveProcesses() {
119
119
  debug("failed to get active process information:", error);
120
120
  }
121
121
  if (!activeProcesses.length) {
122
- warn("Something prevented Expo from exiting, forcefully exiting now.");
122
+ warn("Something prevented the command from exiting, forcefully exiting now.");
123
123
  } else {
124
124
  const singularOrPlural = activeProcesses.length === 1 ? "1 process" : `${activeProcesses.length} processes`;
125
125
  warn(`Detected ${singularOrPlural} preventing process from exiting, forcefully exiting now.`);
@@ -1 +1 @@
1
- {"version":3,"file":"exit.js","names":[],"sources":["esm/utils/exit.js"],"sourcesContent":["import { ChildProcess } from \"node:child_process\";\nimport process from \"node:process\";\nimport colors from \"picocolors\";\nconst debug = ((..._) => {\n});\nconst PRE_EXIT_SIGNALS = [\"SIGHUP\", \"SIGINT\", \"SIGTERM\", \"SIGBREAK\"];\nconst queue = [];\nlet unsubscribe = null;\nfunction installExitHooks(asyncExitHook) {\n if (!queue.length) {\n unsubscribe = attachMasterListener();\n }\n queue.push(asyncExitHook);\n return () => {\n const index = queue.indexOf(asyncExitHook);\n if (index >= 0) {\n queue.splice(index, 1);\n }\n if (!queue.length) {\n unsubscribe?.();\n }\n };\n}\nfunction createExitHook(signal) {\n return guardAsync(async () => {\n debug(`pre-exit (signal: ${signal}, queue length: ${queue.length})`);\n for (const [index, hookAsync] of Object.entries(queue)) {\n try {\n await hookAsync(signal);\n } catch (error) {\n debug(`Error in exit hook: %O (queue: ${index})`, error);\n }\n }\n debug(`post-exit (code: ${process.exitCode ?? 0})`);\n process.exit();\n });\n}\nfunction attachMasterListener() {\n const hooks = [];\n for (const signal of PRE_EXIT_SIGNALS) {\n const hook = createExitHook(signal);\n hooks.push([signal, hook]);\n process.on(signal, hook);\n }\n return () => {\n for (const [signal, hook] of hooks) {\n process.removeListener(signal, hook);\n }\n };\n}\nfunction ensureProcessExitsAfterDelay(waitUntilExitMs = 1e4, startedAtMs = Date.now()) {\n const expectedResources = [\n process.stdout.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stderr.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stdin.isTTY ? \"TTYWrap\" : \"PipeWrap\"\n ];\n const activeResources = process.getActiveResourcesInfo();\n const unexpectedActiveResources = activeResources.filter((activeResource) => {\n const index = expectedResources.indexOf(activeResource);\n if (index >= 0) {\n expectedResources.splice(index, 1);\n return false;\n }\n return true;\n });\n const canExitProcess = !unexpectedActiveResources.length;\n if (canExitProcess) {\n return debug(\"no active resources detected, process can safely exit\");\n }\n debug(\n `process is trying to exit, but is stuck on unexpected active resources:`,\n unexpectedActiveResources\n );\n const elapsedTime = Date.now() - startedAtMs;\n const killedChildren = killActiveChildProcesses(\n elapsedTime < 200 ? \"SIGTERM\" : \"SIGKILL\"\n );\n if (killedChildren > 0) {\n const recheck = setTimeout(() => {\n clearTimeout(recheck);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 50);\n return;\n }\n if (elapsedTime > waitUntilExitMs) {\n debug(\n \"active handles detected past the exit delay, forcefully exiting:\",\n activeResources\n );\n tryWarnActiveProcesses();\n return process.exit(0);\n }\n const timeoutId = setTimeout(() => {\n clearTimeout(timeoutId);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 100);\n}\nfunction killActiveChildProcesses(signal) {\n try {\n const children = process._getActiveHandles().filter((handle) => handle instanceof ChildProcess);\n for (const child of children) {\n try {\n child.kill(signal);\n } catch (err) {\n debug(\"failed to kill child process:\", err);\n }\n }\n return children.length;\n } catch (err) {\n debug(\"failed to enumerate active child processes:\", err);\n return 0;\n }\n}\nfunction tryWarnActiveProcesses() {\n let activeProcesses = [];\n try {\n const children = process._getActiveHandles().filter((handle) => handle instanceof ChildProcess);\n if (children.length) {\n activeProcesses = children.map((child) => child.spawnargs.join(\" \"));\n }\n } catch (error) {\n debug(\"failed to get active process information:\", error);\n }\n if (!activeProcesses.length) {\n warn(\"Something prevented Expo from exiting, forcefully exiting now.\");\n } else {\n const singularOrPlural = activeProcesses.length === 1 ? \"1 process\" : `${activeProcesses.length} processes`;\n warn(\n `Detected ${singularOrPlural} preventing process from exiting, forcefully exiting now.`\n );\n warn(\" - \" + activeProcesses.join(\"\\n - \"));\n }\n}\nfunction guardAsync(fn) {\n let invoked = false;\n let returnValue;\n const guard = async (...args) => {\n if (!invoked) {\n invoked = true;\n returnValue = await fn(...args);\n }\n return returnValue;\n };\n return guard;\n}\nfunction warn(...message) {\n console.warn(...message.map((value) => colors.yellow(value)));\n}\nexport {\n ensureProcessExitsAfterDelay,\n guardAsync,\n installExitHooks,\n warn\n};\n//# sourceMappingURL=exit.js.map\n"],"mappings":"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"}
1
+ {"version":3,"file":"exit.js","names":[],"sources":["esm/utils/exit.js"],"sourcesContent":["import { ChildProcess } from \"node:child_process\";\nimport process from \"node:process\";\nimport colors from \"picocolors\";\nconst debug = ((..._) => {\n});\nconst PRE_EXIT_SIGNALS = [\"SIGHUP\", \"SIGINT\", \"SIGTERM\", \"SIGBREAK\"];\nconst queue = [];\nlet unsubscribe = null;\nfunction installExitHooks(asyncExitHook) {\n if (!queue.length) {\n unsubscribe = attachMasterListener();\n }\n queue.push(asyncExitHook);\n return () => {\n const index = queue.indexOf(asyncExitHook);\n if (index >= 0) {\n queue.splice(index, 1);\n }\n if (!queue.length) {\n unsubscribe?.();\n }\n };\n}\nfunction createExitHook(signal) {\n return guardAsync(async () => {\n debug(`pre-exit (signal: ${signal}, queue length: ${queue.length})`);\n for (const [index, hookAsync] of Object.entries(queue)) {\n try {\n await hookAsync(signal);\n } catch (error) {\n debug(`Error in exit hook: %O (queue: ${index})`, error);\n }\n }\n debug(`post-exit (code: ${process.exitCode ?? 0})`);\n process.exit();\n });\n}\nfunction attachMasterListener() {\n const hooks = [];\n for (const signal of PRE_EXIT_SIGNALS) {\n const hook = createExitHook(signal);\n hooks.push([signal, hook]);\n process.on(signal, hook);\n }\n return () => {\n for (const [signal, hook] of hooks) {\n process.removeListener(signal, hook);\n }\n };\n}\nfunction ensureProcessExitsAfterDelay(waitUntilExitMs = 1e4, startedAtMs = Date.now()) {\n const expectedResources = [\n process.stdout.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stderr.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stdin.isTTY ? \"TTYWrap\" : \"PipeWrap\"\n ];\n const activeResources = process.getActiveResourcesInfo();\n const unexpectedActiveResources = activeResources.filter((activeResource) => {\n const index = expectedResources.indexOf(activeResource);\n if (index >= 0) {\n expectedResources.splice(index, 1);\n return false;\n }\n return true;\n });\n const canExitProcess = !unexpectedActiveResources.length;\n if (canExitProcess) {\n return debug(\"no active resources detected, process can safely exit\");\n }\n debug(\n `process is trying to exit, but is stuck on unexpected active resources:`,\n unexpectedActiveResources\n );\n const elapsedTime = Date.now() - startedAtMs;\n const killedChildren = killActiveChildProcesses(\n elapsedTime < 200 ? \"SIGTERM\" : \"SIGKILL\"\n );\n if (killedChildren > 0) {\n const recheck = setTimeout(() => {\n clearTimeout(recheck);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 50);\n return;\n }\n if (elapsedTime > waitUntilExitMs) {\n debug(\n \"active handles detected past the exit delay, forcefully exiting:\",\n activeResources\n );\n tryWarnActiveProcesses();\n return process.exit(0);\n }\n const timeoutId = setTimeout(() => {\n clearTimeout(timeoutId);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 100);\n}\nfunction killActiveChildProcesses(signal) {\n try {\n const children = process._getActiveHandles().filter((handle) => handle instanceof ChildProcess);\n for (const child of children) {\n try {\n child.kill(signal);\n } catch (err) {\n debug(\"failed to kill child process:\", err);\n }\n }\n return children.length;\n } catch (err) {\n debug(\"failed to enumerate active child processes:\", err);\n return 0;\n }\n}\nfunction tryWarnActiveProcesses() {\n let activeProcesses = [];\n try {\n const children = process._getActiveHandles().filter((handle) => handle instanceof ChildProcess);\n if (children.length) {\n activeProcesses = children.map((child) => child.spawnargs.join(\" \"));\n }\n } catch (error) {\n debug(\"failed to get active process information:\", error);\n }\n if (!activeProcesses.length) {\n warn(\"Something prevented the command from exiting, forcefully exiting now.\");\n } else {\n const singularOrPlural = activeProcesses.length === 1 ? \"1 process\" : `${activeProcesses.length} processes`;\n warn(\n `Detected ${singularOrPlural} preventing process from exiting, forcefully exiting now.`\n );\n warn(\" - \" + activeProcesses.join(\"\\n - \"));\n }\n}\nfunction guardAsync(fn) {\n let invoked = false;\n let returnValue;\n const guard = async (...args) => {\n if (!invoked) {\n invoked = true;\n returnValue = await fn(...args);\n }\n return returnValue;\n };\n return guard;\n}\nfunction warn(...message) {\n console.warn(...message.map((value) => colors.yellow(value)));\n}\nexport {\n ensureProcessExitsAfterDelay,\n guardAsync,\n installExitHooks,\n warn\n};\n//# sourceMappingURL=exit.js.map\n"],"mappings":"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"}
@@ -199,7 +199,7 @@ function tryWarnActiveProcesses() {
199
199
  debug("failed to get active process information:", error);
200
200
  }
201
201
  if (!activeProcesses.length) {
202
- warn("Something prevented Expo from exiting, forcefully exiting now.");
202
+ warn("Something prevented the command from exiting, forcefully exiting now.");
203
203
  } else {
204
204
  var singularOrPlural = activeProcesses.length === 1 ? "1 process" : `${activeProcesses.length} processes`;
205
205
  warn(`Detected ${singularOrPlural} preventing process from exiting, forcefully exiting now.`);
@@ -1 +1 @@
1
- {"version":3,"file":"exit.native.js","names":[],"sources":["esm/utils/exit.native.js"],"sourcesContent":["import { ChildProcess } from \"child_process\";\nimport process from \"process\";\nimport colors from \"picocolors\";\nvar debug = function() {\n for (var _len = arguments.length, _ = new Array(_len), _key = 0; _key < _len; _key++) {\n _[_key] = arguments[_key];\n }\n};\nvar PRE_EXIT_SIGNALS = [\n \"SIGHUP\",\n \"SIGINT\",\n \"SIGTERM\",\n \"SIGBREAK\"\n];\nvar queue = [];\nvar unsubscribe = null;\nfunction installExitHooks(asyncExitHook) {\n if (!queue.length) {\n unsubscribe = attachMasterListener();\n }\n queue.push(asyncExitHook);\n return function() {\n var index = queue.indexOf(asyncExitHook);\n if (index >= 0) {\n queue.splice(index, 1);\n }\n if (!queue.length) {\n unsubscribe === null || unsubscribe === void 0 ? void 0 : unsubscribe();\n }\n };\n}\nfunction createExitHook(signal) {\n return guardAsync(async function() {\n var _process_exitCode;\n debug(`pre-exit (signal: ${signal}, queue length: ${queue.length})`);\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = Object.entries(queue)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var [index, hookAsync] = _step.value;\n try {\n await hookAsync(signal);\n } catch (error) {\n debug(`Error in exit hook: %O (queue: ${index})`, error);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n debug(`post-exit (code: ${(_process_exitCode = process.exitCode) !== null && _process_exitCode !== void 0 ? _process_exitCode : 0})`);\n process.exit();\n });\n}\nfunction attachMasterListener() {\n var hooks = [];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = PRE_EXIT_SIGNALS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var signal = _step.value;\n var hook = createExitHook(signal);\n hooks.push([\n signal,\n hook\n ]);\n process.on(signal, hook);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return function() {\n var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;\n try {\n for (var _iterator2 = hooks[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var [signal2, hook2] = _step2.value;\n process.removeListener(signal2, hook2);\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return != null) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n };\n}\nfunction ensureProcessExitsAfterDelay() {\n var waitUntilExitMs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 1e4, startedAtMs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Date.now();\n var expectedResources = [\n process.stdout.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stderr.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stdin.isTTY ? \"TTYWrap\" : \"PipeWrap\"\n ];\n var activeResources = process.getActiveResourcesInfo();\n var unexpectedActiveResources = activeResources.filter(function(activeResource) {\n var index = expectedResources.indexOf(activeResource);\n if (index >= 0) {\n expectedResources.splice(index, 1);\n return false;\n }\n return true;\n });\n var canExitProcess = !unexpectedActiveResources.length;\n if (canExitProcess) {\n return debug(\"no active resources detected, process can safely exit\");\n }\n debug(`process is trying to exit, but is stuck on unexpected active resources:`, unexpectedActiveResources);\n var elapsedTime = Date.now() - startedAtMs;\n var killedChildren = killActiveChildProcesses(elapsedTime < 200 ? \"SIGTERM\" : \"SIGKILL\");\n if (killedChildren > 0) {\n var recheck = setTimeout(function() {\n clearTimeout(recheck);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 50);\n return;\n }\n if (elapsedTime > waitUntilExitMs) {\n debug(\"active handles detected past the exit delay, forcefully exiting:\", activeResources);\n tryWarnActiveProcesses();\n return process.exit(0);\n }\n var timeoutId = setTimeout(function() {\n clearTimeout(timeoutId);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 100);\n}\nfunction killActiveChildProcesses(signal) {\n try {\n var children = process._getActiveHandles().filter(function(handle) {\n return handle instanceof ChildProcess;\n });\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = children[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var child = _step.value;\n try {\n child.kill(signal);\n } catch (err) {\n debug(\"failed to kill child process:\", err);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return children.length;\n } catch (err) {\n debug(\"failed to enumerate active child processes:\", err);\n return 0;\n }\n}\nfunction tryWarnActiveProcesses() {\n var activeProcesses = [];\n try {\n var children = process._getActiveHandles().filter(function(handle) {\n return handle instanceof ChildProcess;\n });\n if (children.length) {\n activeProcesses = children.map(function(child) {\n return child.spawnargs.join(\" \");\n });\n }\n } catch (error) {\n debug(\"failed to get active process information:\", error);\n }\n if (!activeProcesses.length) {\n warn(\"Something prevented Expo from exiting, forcefully exiting now.\");\n } else {\n var singularOrPlural = activeProcesses.length === 1 ? \"1 process\" : `${activeProcesses.length} processes`;\n warn(`Detected ${singularOrPlural} preventing process from exiting, forcefully exiting now.`);\n warn(\" - \" + activeProcesses.join(\"\\n - \"));\n }\n}\nfunction guardAsync(fn) {\n var invoked = false;\n var returnValue;\n var guard = async function() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (!invoked) {\n invoked = true;\n returnValue = await fn(...args);\n }\n return returnValue;\n };\n return guard;\n}\nfunction warn() {\n for (var _len = arguments.length, message = new Array(_len), _key = 0; _key < _len; _key++) {\n message[_key] = arguments[_key];\n }\n console.warn(...message.map(function(value) {\n return colors.yellow(value);\n }));\n}\nexport {\n ensureProcessExitsAfterDelay,\n guardAsync,\n installExitHooks,\n warn\n};\n//# sourceMappingURL=exit.js.map\n"],"mappings":"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"}
1
+ {"version":3,"file":"exit.native.js","names":[],"sources":["esm/utils/exit.native.js"],"sourcesContent":["import { ChildProcess } from \"child_process\";\nimport process from \"process\";\nimport colors from \"picocolors\";\nvar debug = function() {\n for (var _len = arguments.length, _ = new Array(_len), _key = 0; _key < _len; _key++) {\n _[_key] = arguments[_key];\n }\n};\nvar PRE_EXIT_SIGNALS = [\n \"SIGHUP\",\n \"SIGINT\",\n \"SIGTERM\",\n \"SIGBREAK\"\n];\nvar queue = [];\nvar unsubscribe = null;\nfunction installExitHooks(asyncExitHook) {\n if (!queue.length) {\n unsubscribe = attachMasterListener();\n }\n queue.push(asyncExitHook);\n return function() {\n var index = queue.indexOf(asyncExitHook);\n if (index >= 0) {\n queue.splice(index, 1);\n }\n if (!queue.length) {\n unsubscribe === null || unsubscribe === void 0 ? void 0 : unsubscribe();\n }\n };\n}\nfunction createExitHook(signal) {\n return guardAsync(async function() {\n var _process_exitCode;\n debug(`pre-exit (signal: ${signal}, queue length: ${queue.length})`);\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = Object.entries(queue)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var [index, hookAsync] = _step.value;\n try {\n await hookAsync(signal);\n } catch (error) {\n debug(`Error in exit hook: %O (queue: ${index})`, error);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n debug(`post-exit (code: ${(_process_exitCode = process.exitCode) !== null && _process_exitCode !== void 0 ? _process_exitCode : 0})`);\n process.exit();\n });\n}\nfunction attachMasterListener() {\n var hooks = [];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = PRE_EXIT_SIGNALS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var signal = _step.value;\n var hook = createExitHook(signal);\n hooks.push([\n signal,\n hook\n ]);\n process.on(signal, hook);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return function() {\n var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;\n try {\n for (var _iterator2 = hooks[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var [signal2, hook2] = _step2.value;\n process.removeListener(signal2, hook2);\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return != null) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n };\n}\nfunction ensureProcessExitsAfterDelay() {\n var waitUntilExitMs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 1e4, startedAtMs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Date.now();\n var expectedResources = [\n process.stdout.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stderr.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stdin.isTTY ? \"TTYWrap\" : \"PipeWrap\"\n ];\n var activeResources = process.getActiveResourcesInfo();\n var unexpectedActiveResources = activeResources.filter(function(activeResource) {\n var index = expectedResources.indexOf(activeResource);\n if (index >= 0) {\n expectedResources.splice(index, 1);\n return false;\n }\n return true;\n });\n var canExitProcess = !unexpectedActiveResources.length;\n if (canExitProcess) {\n return debug(\"no active resources detected, process can safely exit\");\n }\n debug(`process is trying to exit, but is stuck on unexpected active resources:`, unexpectedActiveResources);\n var elapsedTime = Date.now() - startedAtMs;\n var killedChildren = killActiveChildProcesses(elapsedTime < 200 ? \"SIGTERM\" : \"SIGKILL\");\n if (killedChildren > 0) {\n var recheck = setTimeout(function() {\n clearTimeout(recheck);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 50);\n return;\n }\n if (elapsedTime > waitUntilExitMs) {\n debug(\"active handles detected past the exit delay, forcefully exiting:\", activeResources);\n tryWarnActiveProcesses();\n return process.exit(0);\n }\n var timeoutId = setTimeout(function() {\n clearTimeout(timeoutId);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 100);\n}\nfunction killActiveChildProcesses(signal) {\n try {\n var children = process._getActiveHandles().filter(function(handle) {\n return handle instanceof ChildProcess;\n });\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = children[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var child = _step.value;\n try {\n child.kill(signal);\n } catch (err) {\n debug(\"failed to kill child process:\", err);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return children.length;\n } catch (err) {\n debug(\"failed to enumerate active child processes:\", err);\n return 0;\n }\n}\nfunction tryWarnActiveProcesses() {\n var activeProcesses = [];\n try {\n var children = process._getActiveHandles().filter(function(handle) {\n return handle instanceof ChildProcess;\n });\n if (children.length) {\n activeProcesses = children.map(function(child) {\n return child.spawnargs.join(\" \");\n });\n }\n } catch (error) {\n debug(\"failed to get active process information:\", error);\n }\n if (!activeProcesses.length) {\n warn(\"Something prevented the command from exiting, forcefully exiting now.\");\n } else {\n var singularOrPlural = activeProcesses.length === 1 ? \"1 process\" : `${activeProcesses.length} processes`;\n warn(`Detected ${singularOrPlural} preventing process from exiting, forcefully exiting now.`);\n warn(\" - \" + activeProcesses.join(\"\\n - \"));\n }\n}\nfunction guardAsync(fn) {\n var invoked = false;\n var returnValue;\n var guard = async function() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (!invoked) {\n invoked = true;\n returnValue = await fn(...args);\n }\n return returnValue;\n };\n return guard;\n}\nfunction warn() {\n for (var _len = arguments.length, message = new Array(_len), _key = 0; _key < _len; _key++) {\n message[_key] = arguments[_key];\n }\n console.warn(...message.map(function(value) {\n return colors.yellow(value);\n }));\n}\nexport {\n ensureProcessExitsAfterDelay,\n guardAsync,\n installExitHooks,\n warn\n};\n//# sourceMappingURL=exit.js.map\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vxrn/vite-plugin-metro",
3
- "version": "2.0.0-beta.51.1",
3
+ "version": "2.0.0-beta.56.1",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "main": "dist/cjs",
@@ -61,8 +61,6 @@
61
61
  "typecheck": "tsc --noEmit"
62
62
  },
63
63
  "peerDependencies": {
64
- "@expo/metro-config": "58.0.0-canary-20260909-ea7a89a",
65
- "expo": "58.0.0-canary-20260909-ea7a89a",
66
64
  "metro": "^0.87.0",
67
65
  "metro-config": "^0.87.0",
68
66
  "react-native": "0.87.1",
@@ -74,11 +72,13 @@
74
72
  "@jridgewell/remapping": "^2.3.0",
75
73
  "@jridgewell/trace-mapping": "^0.3.25",
76
74
  "@oxc-project/runtime": "^0.112.0",
77
- "@vxrn/compiler": "2.0.0-beta.51.1",
78
- "@vxrn/debug": "2.0.0-beta.51.1",
79
- "@vxrn/utils": "2.0.0-beta.51.1",
80
- "babel-preset-expo": "58.0.0-canary-20260909-ea7a89a",
75
+ "@react-native/babel-preset": "^0.87.1",
76
+ "@react-native/metro-config": "^0.87.1",
77
+ "@vxrn/compiler": "2.0.0-beta.56.1",
78
+ "@vxrn/debug": "2.0.0-beta.56.1",
79
+ "@vxrn/utils": "2.0.0-beta.56.1",
81
80
  "esbuild": "^0.25.12",
81
+ "flow-parser": "^0.331.0",
82
82
  "launch-editor": "^2.10.0",
83
83
  "magic-string": "^0.30.21",
84
84
  "micromatch": "^4.0.8",
@@ -88,13 +88,11 @@
88
88
  },
89
89
  "devDependencies": {
90
90
  "@biomejs/biome": "2.3.3",
91
- "@expo/metro-config": "58.0.0-canary-20260909-ea7a89a",
92
91
  "@react-native/dev-middleware": "^0.87.1",
93
92
  "@tamagui/build": "3.0.0-beta.1309.1",
94
93
  "@types/babel__helper-plugin-utils": "^7",
95
94
  "@types/node": "^24.10.0",
96
95
  "depcheck": "^1.4.7",
97
- "expo": "58.0.0-canary-20260909-ea7a89a",
98
96
  "metro": "^0.87.0",
99
97
  "metro-config": "^0.87.0",
100
98
  "react-native": "0.87.1",
@@ -9,7 +9,7 @@ type PluginOptions = {
9
9
  /**
10
10
  * Babel plugin to replace `import.meta.env.*` and `process.env.*` with env values.
11
11
  *
12
- * Platform-specific env vars (VITE_ENVIRONMENT, VITE_NATIVE, ONE_PLATFORM, TAMAGUI_ENVIRONMENT)
12
+ * Platform-specific env vars (VITE_ENVIRONMENT, VITE_NATIVE, ONE_PLATFORM, EXPO_OS, TAMAGUI_ENVIRONMENT)
13
13
  * are automatically injected based on the babel caller's platform.
14
14
  *
15
15
  * This plugin is referenced by name since Metro runs transformers in separate workers:
@@ -13,8 +13,18 @@ describe('one platform env contract', () => {
13
13
  expect(getPlatformEnv('ssr').ONE_PLATFORM).toBe('web')
14
14
  })
15
15
 
16
- it('never defines EXPO_OS', () => {
17
- for (const environment of ['client', 'ssr', 'ios', 'android'] as const) {
16
+ it('defines the Expo platform alias only on native', () => {
17
+ for (const environment of ['ios', 'android'] as const) {
18
+ expect(getPlatformEnv(environment).EXPO_OS).toBe(
19
+ getPlatformEnv(environment).ONE_PLATFORM
20
+ )
21
+ const define = getPlatformEnvDefine(environment)
22
+ expect(define['process.env.EXPO_OS']).toBe(define['process.env.ONE_PLATFORM'])
23
+ expect(define['import.meta.env.EXPO_OS']).toBe(
24
+ define['import.meta.env.ONE_PLATFORM']
25
+ )
26
+ }
27
+ for (const environment of ['client', 'ssr'] as const) {
18
28
  expect(getPlatformEnv(environment)).not.toHaveProperty('EXPO_OS')
19
29
  const define = getPlatformEnvDefine(environment)
20
30
  expect(define).not.toHaveProperty('process.env.EXPO_OS')
@@ -5,6 +5,7 @@ export type PlatformEnv = {
5
5
  VITE_ENVIRONMENT: ViteEnvironment
6
6
  VITE_NATIVE: '' | '1'
7
7
  ONE_PLATFORM: 'web' | 'ios' | 'android'
8
+ EXPO_OS?: 'ios' | 'android'
8
9
  TAMAGUI_TARGET: 'web' | 'native'
9
10
  TAMAGUI_ENVIRONMENT: ViteEnvironment
10
11
  }
@@ -28,6 +29,7 @@ const platformEnvMap: Record<ViteEnvironment, PlatformEnv> = {
28
29
  VITE_ENVIRONMENT: 'ios',
29
30
  VITE_NATIVE: '1',
30
31
  ONE_PLATFORM: 'ios',
32
+ EXPO_OS: 'ios',
31
33
  TAMAGUI_TARGET: 'native',
32
34
  TAMAGUI_ENVIRONMENT: 'ios',
33
35
  },
@@ -35,6 +37,7 @@ const platformEnvMap: Record<ViteEnvironment, PlatformEnv> = {
35
37
  VITE_ENVIRONMENT: 'android',
36
38
  VITE_NATIVE: '1',
37
39
  ONE_PLATFORM: 'android',
40
+ EXPO_OS: 'android',
38
41
  TAMAGUI_TARGET: 'native',
39
42
  TAMAGUI_ENVIRONMENT: 'android',
40
43
  },
package/src/index.ts CHANGED
@@ -1,7 +1,5 @@
1
1
  export { metroPlugin } from './plugins/metroPlugin'
2
2
  export type { MetroPluginOptions } from './plugins/metroPlugin'
3
- export { expoManifestRequestHandlerPlugin } from './plugins/expoManifestRequestHandlerPlugin'
4
- export type { ExpoManifestRequestHandlerPluginPluginOptions } from './plugins/expoManifestRequestHandlerPlugin'
5
3
  export {
6
4
  getPlatformEnv,
7
5
  getPlatformEnvDefine,
@@ -18,41 +18,35 @@ function pluginEnv(config: any): Record<string, any> {
18
18
  }
19
19
 
20
20
  describe('metro babel env contract', () => {
21
- it('picks up ONE_PUBLIC_ keys by default and never copies expo keys', () => {
22
- process.env.ONE_PUBLIC_API = 'https://api.test'
23
- try {
24
- const env = pluginEnv(
25
- viteConfig({ env: { ONE_PUBLIC_API: 'https://api.test' } })
26
- )
27
- expect(env.ONE_PUBLIC_API).toBe('https://api.test')
28
- expect(env).not.toHaveProperty('EXPO_OS')
29
- } finally {
30
- delete process.env.ONE_PUBLIC_API
31
- }
21
+ it('picks up ONE_PUBLIC_ keys by default with Expo aliases', () => {
22
+ const env = pluginEnv(viteConfig({ env: { ONE_PUBLIC_API: 'https://api.test' } }))
23
+ expect(env.ONE_PUBLIC_API).toBe('https://api.test')
24
+ expect(env.EXPO_PUBLIC_API).toBe('https://api.test')
32
25
  })
33
26
 
34
27
  it('harvests ONE_PLATFORM from defines for parity with rolldown', () => {
35
- const env = pluginEnv(
36
- viteConfig({ define: { 'process.env.ONE_PLATFORM': '"ios"' } })
37
- )
28
+ const env = pluginEnv(viteConfig({ define: { 'process.env.ONE_PLATFORM': '"ios"' } }))
38
29
  expect(env.ONE_PLATFORM).toBe('ios')
39
30
  })
40
31
 
41
- it('rejects an expo env prefix instead of copying it', () => {
42
- expect(() =>
43
- pluginEnv(viteConfig({ envPrefix: ['VITE_', 'EXPO_PUBLIC_'] }))
44
- ).toThrow(/rename it to ONE_PUBLIC_\*/)
32
+ it('accepts an Expo env prefix', () => {
33
+ expect(pluginEnv(viteConfig({ envPrefix: ['VITE_', 'EXPO_PUBLIC_'] }))).toMatchObject(
34
+ { MODE: 'development' }
35
+ )
45
36
  })
46
37
 
47
- it('rejects expo keys hiding in the loaded env', () => {
48
- expect(() =>
38
+ it('accepts Expo keys without creating One names', () => {
39
+ expect(pluginEnv(viteConfig({ env: { EXPO_PUBLIC_API: 'x' } }))).toMatchObject({
40
+ EXPO_PUBLIC_API: 'x',
41
+ })
42
+ expect(
49
43
  pluginEnv(viteConfig({ env: { EXPO_PUBLIC_API: 'x' } }))
50
- ).toThrow(/rename it to ONE_PUBLIC_\*/)
44
+ ).not.toHaveProperty('ONE_PUBLIC_API')
51
45
  })
52
46
 
53
- it('rejects expo keys hiding in defines', () => {
54
- expect(() =>
55
- pluginEnv(viteConfig({ define: { 'process.env.EXPO_OS': '"ios"' } }))
56
- ).toThrow(/ONE_PUBLIC_\* or ONE_PLATFORM/)
47
+ it('accepts Expo platform defines for the platform plugin to override', () => {
48
+ expect(
49
+ pluginEnv(viteConfig({ define: { 'process.env.EXPO_OS': '"ios"' } })).EXPO_OS
50
+ ).toBe('ios')
57
51
  })
58
52
  })
@@ -1,10 +1,11 @@
1
1
  import type { ResolvedConfig } from 'vite'
2
2
  import type { TransformOptions } from '@babel/core'
3
+ import { withExpoPublicEnvAliases } from '@vxrn/utils/publicEnv'
3
4
 
4
5
  /**
5
6
  * Creates babel config for Metro transforms from Vite config.
6
7
  *
7
- * Platform-specific env vars (VITE_ENVIRONMENT, VITE_NATIVE, ONE_PLATFORM, TAMAGUI_ENVIRONMENT)
8
+ * Platform-specific env vars (VITE_ENVIRONMENT, VITE_NATIVE, ONE_PLATFORM, EXPO_OS, TAMAGUI_ENVIRONMENT)
8
9
  * are handled by the import-meta-env-plugin based on caller.platform and always take precedence.
9
10
  */
10
11
  export function getMetroBabelConfigFromViteConfig(
@@ -18,48 +19,28 @@ export function getMetroBabelConfigFromViteConfig(
18
19
  SSR: false,
19
20
  }
20
21
 
21
- const envPrefix = config.envPrefix || ['VITE_', 'ONE_PUBLIC_']
22
+ const envPrefix = config.envPrefix || ['VITE_', 'ONE_PUBLIC_', 'EXPO_PUBLIC_']
22
23
  const prefixes = Array.isArray(envPrefix) ? envPrefix : [envPrefix]
23
24
 
24
- // expo-prefixed public vars fail with a migration error instead of being
25
- // copied, ignored, or aliased into the bundle.
26
- for (const prefix of prefixes) {
27
- if (prefix.startsWith('EXPO_')) {
28
- throw new Error(
29
- `[vxrn/metro] env prefix "${prefix}" is removed. rename it to ONE_PUBLIC_*`
30
- )
31
- }
32
- }
33
-
34
25
  for (const key of Object.keys(config.env)) {
35
- if (key.startsWith('EXPO_PUBLIC_')) {
36
- throw new Error(
37
- `[vxrn/metro] ${key} uses the removed expo prefix. rename it to ONE_PUBLIC_*`
38
- )
39
- }
40
26
  if (prefixes.some((p) => key.startsWith(p))) {
41
- importMetaEnv[key] = process.env[key]
27
+ importMetaEnv[key] = process.env[key] ?? config.env[key]
42
28
  }
43
29
  }
44
30
 
45
31
  // also harvest keys from config.define (populated by env-defining plugins like one's).
46
32
  // we union the user's envPrefix with framework-level defaults so we still pick up
47
- // VITE_/ONE_PUBLIC_/ONE_ even when another plugin replaces envPrefix wholesale
33
+ // VITE_/ONE_PUBLIC_/EXPO_PUBLIC_/ONE_ even when another plugin replaces envPrefix wholesale
48
34
  // (e.g. some plugins set it to a single project-specific prefix).
49
35
  const definePrefixes = Array.from(
50
- new Set([...prefixes, 'VITE_', 'ONE_PUBLIC_', 'ONE_'])
36
+ new Set([...prefixes, 'VITE_', 'ONE_PUBLIC_', 'EXPO_PUBLIC_', 'ONE_'])
51
37
  )
52
38
  for (const defineKey of Object.keys(config.define || {})) {
53
39
  const m = defineKey.match(/^process\.env\.([A-Z][A-Z0-9_]*)$/)
54
40
  if (!m) continue
55
41
  const key = m[1]
56
- if (key.startsWith('EXPO_PUBLIC_') || key === 'EXPO_OS') {
57
- throw new Error(
58
- `[vxrn/metro] ${key} uses the removed expo contract. rename it to ONE_PUBLIC_* or ONE_PLATFORM`
59
- )
60
- }
61
42
  if (key in importMetaEnv) continue
62
- if (!definePrefixes.some((p) => key.startsWith(p))) continue
43
+ if (key !== 'EXPO_OS' && !definePrefixes.some((p) => key.startsWith(p))) continue
63
44
  const raw = config.define![defineKey]
64
45
  try {
65
46
  importMetaEnv[key] = typeof raw === 'string' ? JSON.parse(raw) : raw
@@ -72,7 +53,7 @@ export function getMetroBabelConfigFromViteConfig(
72
53
  plugins: [
73
54
  [
74
55
  '@vxrn/vite-plugin-metro/babel-plugins/import-meta-env-plugin',
75
- { env: importMetaEnv },
56
+ { env: withExpoPublicEnvAliases(importMetaEnv) },
76
57
  ],
77
58
  ],
78
59
  }
@@ -0,0 +1,60 @@
1
+ import fs from 'node:fs'
2
+ import path from 'node:path'
3
+ import { afterAll, describe, expect, it } from 'vitest'
4
+ import { buildMetroConfigInputFromViteConfig } from './getMetroConfigFromViteConfig'
5
+
6
+ const tmpDirs: string[] = []
7
+
8
+ afterAll(() => {
9
+ for (const tmpDir of tmpDirs) {
10
+ fs.rmSync(tmpDir, { recursive: true, force: true })
11
+ }
12
+ })
13
+
14
+ describe('bare main module entry', () => {
15
+ it('survives a resolver-replacing defaultConfigOverrides', async () => {
16
+ const workspaceRoot = path.resolve(__dirname, '../../../../')
17
+ const fixtureRoot = fs.mkdtempSync(path.join(workspaceRoot, '.tmp-metro-entry-'))
18
+ tmpDirs.push(fixtureRoot)
19
+ fs.writeFileSync(
20
+ path.join(fixtureRoot, 'package.json'),
21
+ JSON.stringify({ name: 'tmp-metro-entry', private: true })
22
+ )
23
+
24
+ const seen: string[] = []
25
+ const { defaultConfig } = await buildMetroConfigInputFromViteConfig(
26
+ { root: fixtureRoot } as any,
27
+ {
28
+ mainModuleName: 'one/metro-entry',
29
+ watchman: false,
30
+ defaultConfigOverrides: {
31
+ resolver: {
32
+ sourceExts: ['js'],
33
+ },
34
+ },
35
+ } as any
36
+ )
37
+
38
+ expect((defaultConfig as any).watchFolders).toContain(workspaceRoot)
39
+ expect((defaultConfig as any).resolver.nodeModulesPaths).toContain(
40
+ path.join(workspaceRoot, 'node_modules')
41
+ )
42
+
43
+ const context = {
44
+ originModulePath: `${fixtureRoot}/.`,
45
+ resolveRequest: (_ctx: any, name: string) => {
46
+ seen.push(name)
47
+ return { type: 'sourceFile', filePath: name }
48
+ },
49
+ }
50
+ await (defaultConfig as any).resolver.resolveRequest(
51
+ context,
52
+ './one/metro-entry',
53
+ 'ios'
54
+ )
55
+ expect(seen).toEqual(['one/metro-entry'])
56
+
57
+ await (defaultConfig as any).resolver.resolveRequest(context, 'react-native', 'ios')
58
+ expect(seen).toEqual(['one/metro-entry', 'react-native'])
59
+ })
60
+ })